Linux下的文件系统以及磁盘操作


在文件系统方面,Linux可以算得上操作系统中的 “瑞士军刀”。Linux 支持许多种文件系统,从日志型文件系统到集群文件系统和加密文件系统,而“什么是文件系统”?文件系统是对一个存储设备上的数据和元数据进行组织的机制。
常见的文件系统:ext2、ext3、ext4、xfs、jfs、reiserfs、iso9660、swap、VFAT、
 
VFS等
例如:EXT2 XFS JFS REISERF3等都是单个文件系统使用
说到文件系统,就要说一下硬盘,硬盘出厂后的第一次格式化叫做低级格式化,其作用主要是为了创建磁道,同一个编号的磁道形成一个柱面,分区时则是按照柱面进行分区,从外到里从低到高进行划分。每一个分区可以独立的创建一个文件系统。
Linux 以一组通用对象的角度看待所有文件系统。这些对象是超级块(superblock)、inode、dentry 和文件。超级块在每个文件系统的根上,超级块描述和维护文件系统的状态。文件系统中管理的每个对象(文件或目录)在Linux 中表示为一个inode。
 
inode 包含管理文件系统中的对象所需的所有元数据(包括可以在对象上执行的操作)。另一组结构称为dentry,它们用来实现名称和inode 之间的映射,有一个目录缓存用来保存最近使用的dentry。dentry 还维护目录和文件之间的关系,从而支持在文件系统中移动。最后,VFS 文件表示一个打开的文件;注:inode:用于存放权限,属主属组,大小,类型,磁盘块的指向;目录:每一个目录需要一个inode,存放文件名;位图:索引inode 非为0/1;磁盘块位图:标志磁盘块有没有被使用。
和文件系统有联系的命令:
1、ln:
格式:ln [options] SRC DST 默认创建的是硬链接(不能跨分区),从文件系统的实现上来说,硬链接其实就是将一个文件的的的inode号多次利用,具有不同的指针,只要结点的连接数不是0,文件就一直存在,不管你删除的是源文件还是连接的文件。
常用参数:-s:创建软连接,是一个独立的文件,使用了一个新的inode号,引用的路径,而且可以为目录创建,并且可以跨分区。
因此在对某些文件进行复制,剪切和删除时其实质分别是:复制:将存有的数据所在的磁盘块进行复制一份,并使用新的inode号,建立相应的映射,而剪切则不动数据块,只是将inode号中的文件路径映射修改了,这就是为什么有时候我们在同一个分区上移动一个很大的文件时,也能迅速完成的原因,而删除则是将inode号标识为0,清除其信息,然后将磁盘块标识为未使用,当有新的数据存入时就将原来的数据覆盖,由此当误删了一些数据时只要还未向原有位置写入新的数据时,那些被误删的数据均是可以找回的,像一些软件上的粉碎功能则是想原文件数据存储的位置重新写入01代码,从而达到删除原数据的目的。
2、文件管理
(1).du:用于估算目录和文件的使用量
参数:
-h:单位换算,使大小以M单位显示
-s:显示目录以及目录中所有文件的大小
例如:#du -sh /etc
 
(2).df:用于显示当前系统磁盘的使用情况
-h:单位换算
-i:显示inode的使用情况
例如:#df -ih
 
(3).fdisk:磁盘管理
-l:列出当前系统的每一个磁盘及其当前分区的情况
例如:#fdisk -l
 
(4).压缩工具gzip/bzip2/zip/compress/xz/7z
[1]gzip:压缩文件-->gunzip:解压文件
例如:#gzip FILENAME
#gunzip FILEMAME
参数:
-d:解压缩
-c:gzip -c messages > messages.gz 压缩后保留源文件
-t:测试压缩文件压缩以后是否完整
-#:(1-9)指定压缩比,默认是6.
zcat:在不解压的情况下查看文件
 
[3]zip:可以压缩目录
格式:zip [选项] 压缩后的文件名.zip 需要压缩的文件
例如:#zip message.zip message
例如:#zip myfilezip.zip message inittab 压缩多个文件
unzip:解压缩
 
[4]tar:文件的归档工具
tar tarfile.tar 文件或目录
-c:创建归档
-x:展开归档
-f:归档后文件名
-t:不展开查看归档中的文件
-v:显示整个归档回展开的过程
-z:在创建直接压缩gzip
-j:在创建直接压缩bzip2
-C:指定展开之后存放路径
例如:#tar -cf mytar.tar message inittab 创建归档
例如:#tar -xf mytar.tar
例如:#tar -tf mytar.tar
例如:#tar -zcf
例如:#tar -zxf
例如:#tar xf mytar.tar.gz -C /tmp/test
 
3、分区:在硬盘的0扇区0磁道存放的是MBR其大小是512个字节,其中前446哥字节是引导扇区俗称“BootLoader”,存放的是系统启动的引导,其中的64个字节是FAT分区列表,每16个字节可以引导一个主分区,而这就是我们通常所说的一块硬盘,只能创建最多4个主分区,或者3主一扩展,剩下的2哥字节是封装码占用。
当分区表出现错误或者被破坏的时候,就无法正常进入系统,所以要对系统的分区表进行备份.
命令:
sfdisk:保存备份分区表信息
-d:#sfdisk -d /dev/sdb > /root/sdb.part.bak   将某个磁盘的分区表保存
#sfdisk /dev/sdb < /root/sdb.part.bak
 
Linux识别磁盘设备规则:IDE或者ATA设备被识别为hd;SATA、SCSI、USB等设备被识别为sd; 多块磁盘设备时用a,b,c等字母加以区别,形如:/dev/hda  /dev/hdb   /dev/sda   /dev/sdb
 
创建分区:fdisk /dev/sda
其中的子命令:
w:保存修改并退出
p:显示磁盘列表
n:添加一个新的分区
d:删除一个分区
q:放弃修改并退出
在分区创建完成之后,并不是立即生效,需要使用命令:
partprobe /dev/sda    通知内核重新扫描磁盘sda信息,后若不跟磁盘名,则会扫描所有的磁盘
 
4、格式化:这次的格式化被称为高级格式化
在linux下任何的磁盘或分区没有进行格式化是不能使用的
mkfs -t TYPE DEVICE
例如:#mkfs -t ext3 /dev/sdb1
-L:指定卷标
例如:#e2label /dev/sdb1显示其卷标
例如:#e2label /dev/sdb1 HELLO 设置卷标
 
mke2fs /dev/sdb2
-j:把对应的磁盘分区创建为ext3类型
-L:指定卷标
-b:指定块大小{1024|2048|4096} 
-c:创建文件系统时是否要检查磁盘是否有坏道
-i:指定一个比例,每多少个字节使用一个inode号{128默认|256}
-N:直接指定inode的个数
-m:指定预留给管理员的磁盘百分比
 
5、挂载
在Linux下任何一个存储设备想要被访问,必须将这个设备与根下的一个目录相关联起来,作为一个访问接口,而这个过程叫做挂载,去除关联关系就叫做卸载。
格式:mount 设备 挂载点
例如#mount 显示当前所有已经挂载的文件系统
#mount /dev/cdrom /media 将dev下的cdrom磁盘挂载到media
参数格式:mount [-t fstype] [option] 设备 挂载点
-a:挂载所有的文件系统/etc/fstab  #mount -a
-n:挂载时不更新/etc/mtab文件
-r:只读挂载
-w:读写挂载
-L label:指定卷标进行挂载
-U:指定uuid进行挂载
-o:明确指定挂载选项
    async:异步写入
    atime:当访问时自动更新时间
    auto:可以自动挂载
    exec:允许具有执行权限的文件执行
    nouser:禁止普通用户挂载此设备
    remount:重新挂载(某个属性没打开,需要打开时使用此项)
    ro:只读
    rw:只写
例如:#mount -o ro /dev/sdb1 /mnt 以只读方式将dev下的sdb1分区挂载到/mnt
例如:#mount -o remount,rw /mnt
loop:挂载一个本地设备
例如:#mount -o loop rhci.iso /mnt    挂载一个iso
 
6、umount:设备卸载
umount 挂载点/挂载的设备
例如:#umount /dev/sdb2
blkid DEV:查看设备的文件类型
 
7、检查文件系统
(1).fsck检查文件系统的不一致(具体检查inode与文件不一致)
参数:-t FILETYPE:指定检测的文件系统的类型
例如:#fsck -e ext3
efsck:用来专门检测ext类的文件系统
参数:-f:强行进行检测
-p:自动修复文件系统的不一致
-B:指定磁盘块的大小
 
(2).dumpe2fs:详细的显示ext2 ext3文件系统的信息
参数:-f:即使文件系统不一致也要详细显示其信息
-h:只显示超级块的详细信息
例如:#dumpe2fs /dev/sda


tune2fs:修改ext类的文件系统的属性
参数:-j:将ext2文件类型升级为ext3(不影响磁盘上的数据)
-m:修改保留给root用户的磁盘块与inode的百分比
-r:直接指定块的个数
-L:设定卷标
-l:显示超级快的信息
-c:修改每隔多少次挂载后进行自检
-i:设定每隔多少天进行一次自检,默认单位是天
-u:指定使用者
-o:指定默认的挂载功能
 
(3).交换分区swap(必须是一个独立的分区,其作用相当与windows中的虚拟内存,当物理内存即将用完或者不够使用时才会使用到交换分区)
free -m:以M为单位显示内存信息
格式化:mkswap
参数:-L:指定卷标
启用交换分区:swapon DEV
关闭交换分区:swapoff DEV
启动全部:swapon -a
检查其状态:swapon -s
 
(4).创建一个本地回环文件,也可以理解为复制,可以说是直接复制磁盘块
格式:dd if=FILE of=FILE bs=NU count=NU
if=FILE:要复制的文件
of=FILE:目标
bs:一次复制的单位多大,默认单位字节
count:复制多少个块
#dd if=/etc/issue of=/tmp/abc
#dd if=/dev/sda of=/root/mbr.bak bs=512 count=1 备份mbr Mater Boot Record
#dd if=/dev/zero of=/var/swapfile bs=1M count=1 建一个1M本地回环文件
 
/dev/null
/dev/zero 用于初始化一个分区
 
(5)./ect/fstab 开机自动挂载的文件系统
6个字段:
DEV-name | DEV-label | DEV-uuid
挂载点:
文件系统类型:
挂载选项(defaults);
转储频率:备份{0,1,2}{从不备份,一天一次,两天一次}
自检次序:{0,1,2}{从不,第一,第二},第一只能为根
 
 
 
 
 
本文出自 “向阳草●米奇” 博客

相关内容

    暂无相关文章