• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

Linux中磁盘与文件系统管理

系统管理 彭东稳 9年前 (2015-08-25) 25110次浏览 已收录 0个评论

一、Linux中磁盘的表示方式

1. 在LinuxIDE接口的磁盘表示方式为hd,而SATA,SCSI,USB接口的磁盘表示为sd

2. 硬盘的块数以字母abcd等方式显示,如第一次硬盘hda/sha;第二块硬盘hdb/sdb

3. 硬盘的分区以数字1234等方式显示,如第一块硬盘的第一个分区hda1/sda1;第二分区hda2/sda2

二、MBR分区格式

下面画了一张简易的 MBR 分区图:

Linux中磁盘与文件系统管理

三、创建磁盘分区相关命令

一般新磁盘必须要创建主分区,然后可以创建扩展分区,在扩展分区上创建逻辑分区。但是不管选择完什么分区接下来都要,选择分区编号,选择起始柱面和结束柱面,分配分区大小(+10G就是分10G,支持M,G)等工作。

另外,创建完磁盘分区之后,可以查看/proc/partions文件,会显示内核当前识别的所有分区。但是不会有刚刚创建的分区,因为系统没有重启内核没有识别到。这时就需要partprobe命令,让内核重读内核分区表(一般创建分区后就必须先让内核读取一下系统分区表)

四、创建文件系统相关命令

创建分区时会显示以下信息,下面介绍一下其主要的含义:

五、修复文件系统

fsck:文件系统修复命令,fsck不仅可以对文件系统进行扫描,还能修正文件系统的一些问题;注意的是fsck扫描文件系统时一定要在单用户模式、修复模式或把设备umount后进行。如果扫描正常运行中的系统会造成系统文件损坏

esfsck:专用于修复ext系列文件系统RHEL5.0系列

六、挂载分区相关命令

在 Linux 中将一个文件系统与一个存储设备关联起来的过程称为挂载(mount)。使用 mount 命令将一个文件系统附着到当前文件系统层次结构中(根)。在执行挂装时,要提供文件系统类型、文件系统和一个挂装点。根文件系统被挂载到根目录下“/”上后,在根目录下就有根文件系统的各个目录,文件:/bin /sbin /mnt等,再将其他分区挂接到/mnt目录上,/mnt目录下就有这个分区的各个目录,文件。

mount:挂载指定分区到挂载点

mount挂载都是临时生效的当Linux机器重启时,它会读取/etc/fstab文件然后根据文件中的信息来进行挂载。所以当我们给一个磁盘分区、格式化之后只有写入/etc/fstab文件中以后才可以永久生效。

/etc/fstab文件的格式如下:

/etc/fstab文件中格式分为以上6个字段;前三个字段很好理解分别是挂载的设备、要挂在的点、和文件系统的类型。

挂载选项字段一般写的是defaults表示不给定-o选项时的行为

是否备份是指是否使用dump命令备份,0表示不做,1表示每天备份

是否检测文件系统是指是否使用fsck命令检查备份,0表示不检查,1代表最早检查(一般只有根是1),2也表示要检查只是比1晚些(除了根之外的一般都使用这个)

fuser:验证进程正在使用的文件或套接字文件

df:显示磁盘文件系统的使用情况

需要知道一下 df 命令的统计机制,df 是通过查看文件系统磁盘块分配图得出总块数与剩余块数。这要从程序写文件的方式来谈起了,简单来说,一个进程要向一个文件里面写东西,那么会得到一个 pointer,然后向指针指向的文件(磁盘区域)写入。假如由于某些原因(也可能人为)被指向的文件被删除了,但是( write call)并不知道文件是否还在,就还会继续向里面写,不管文件是否存在,磁盘块还是被写操作使用。所以,这部分正在被写入数据的磁盘块也会被 df 命令所统计。

但 du 命令则不同,du 会把指定目录下所有文件、目录、目录下的文件都进行统计,然后累加得到的值。也就是说 du 命令是建立在文件系统能看到的的确确是有这样一些文件的基础上的。也就是说我们能在文件系统里面看到的文件才会被 du 统计。如果说由于某些原因(也可能人为)文件被删除了,由于文件没有了,所以 du 统计不到写入的这些磁盘块,但是因为写的进程还在,磁盘空间没有被释放,所以 df 却能统计到,所以可能会出现 df 统计的结果比 du 大很多。

在生产环境有一个很常见的案例,比如你的应用启动,在不停往一个日志文件中写入日志,这个时候由于磁盘空间不足,你手动将该日志文件删除了。此时 du 显示的结果会把日志大小减去,而 df 则仍会包含该日志的大小(实际上仍引用了该文件的句柄)。如果没有 du 与 df 的知识,那么此时你应该就进入懵逼状态了。

正确的做法是,如果要删除某个应用正在往里面写内容的日志的文件,不要直接用 rm -rf,而是要:echo “” > log。那么此时两者统计的大小应该相同了。那么如何找出被程序引用着的已经删除的文件,也很简单,使用 lsof 命令即可。lsof 命令是用来查看正在被打开的文件。如果正在被打开的文件被 rm -fr 了,那么就有一个 deleted 表示,所以直接过滤 deleted 标识的文件就可以找到了,比如 lsof | grep deleted 命令然后找到对应应用程序的进程号 kill 掉就可以释放磁盘空间了,但是需要评估一下 kill 的风险。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (0)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!