天天看点

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类型

-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:只显示超级块的详细信息

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}{从不,第一,第二},第一只能为根

<a target="_blank" href="http://blog.51cto.com/attachment/201202/141636521.jpg"></a>

本文转自 向阳草米奇 51CTO博客,原文链接:http://blog.51cto.com/grass51/785156,如需转载请自行联系原作者

继续阅读