100个Linux 命令(4)-管理文件系统

命令篇

43.fdisk

fdisk用于对 MBR 磁盘进行分区,它只能实现 MBR 格式的分区。

如果一个存储设备已经分过区,并且是 mbr 格式的,那么只能继续使用 fdiskparted 工具进行分区。

使用 parted 进行分区也只能划分和已存在分区格式一样的分区。因为无论何种格式的分区,它的分区表和分区标识已经是固定的。

fdisk 帮助

新建一个主分区:

fdisk 新建主分区

新建扩展分区:

fdisk 创建扩展分区

新建逻辑分区:

fdisk 创建逻辑分区

分区结束,输入 "w" 保存并写入分区信息,输入 "q" 不保存分区信息并退出。

分区的过程实质上是划分柱面以及修改分区表。fdisk 操作全部都是在内存中执行的,必须要保存才会生效。

重新读取分区表:partprobe /dev/sdb &>/dev/null

检查分区状态:fdisk -l | grep "^/dev/sdb" &>/dev/null

查看当前内核读取的分区信息:cat /proc/partitions

44.gdisk

gdisk 用来划分 gpt 分区,需要单独安装这个工具包。

gdisk 帮助

添加一个新分区:

gdisk 工具

使用 "w" 保存分区表到磁盘,,确认后将分区表保存到磁盘。

使用partprobe重新读取分区表信息:partprobe /dev/sdb

另外 gdisk 工具在交互过程中,"x"会进入扩展 功能模式:

  • s:修改分区表大小,注意不是分区大小
  • u:将分区表导出
  • z:损毁 gpt 上的数据

45.parted

parted支持 mbr 格式和 gpt 格式的磁盘分区。parted工具既可以一步到位式分区,也可以进行交互式分区。

parted分区工具是实时的,所以每一步操作都是直接写入磁盘而不是内存。

parted 工具帮助信息

parted常用的命令是 mklabel、rm、print、mkpart、help、quit。

parted 分区的前提是磁盘已经有分区表(partition table)或磁盘标签(disk label),否则将显示“unrecognised disk label”,这和 fdisk/gdisk不同,所以需要先使用 mklabel 创建标签或分区表,最常见的标签(分区表)为“msdos”和“gpt”,其中 msdos 分区就是 MBR 格式的分区表,也就是会有主分区、扩展分区和逻辑分区的概念和限制。

使用 parted 工具进行分区无需运行 partprobe 重新读取分区表,内核会即时识别已经分区的分区信息。

parted 实现非交互式分区(待更新)

分区结束后就需要格式化创建文件系统了,格式化分区的过程就是创建文件系统的过程。

46.mkfs

要查看支持的文件系统类型,输入 mkfs 后,按两下 tab 键即可列出各文件系统对应的格式化命令,也就是支持的文件系统类型。

CentOS 7 mkfs支持的文件系统

一般用法 :mkfs [-t fstype] 分区

-t 可以指定要创建并且支持的文件系统类型,默认为 ext2文件系统。

47.mke2fs

mkfs.ext2/mkfs.ext3/mkfs.ext4或 mkfs -t extX 实际上都是在调用 mke2fs 工具。

该文件创建文件系统时,会从/etc/mke2fs.conf 配置中读取默认的配置选项。

选项

-t:指定文件系统类型

-b:指定 block 大小

-I:指定 inode 大小

-i:指定分配 inode 的比例

48.tune2fs

修改文件系统属性,如-j 选项将 ext2文件系统升级为 ext3。

49.lsblk

`lsblk`用于列出设备及其状态,主要列出非空的存储设备。实际上它只会列出/sys/dev/block中的主次设备号文件,且默认只列出非空设备。

lsblk
  • NAME:设备名称;
  • MAJ:MIN:主设备号和次设备号;
  • RM:是否为可卸载设备,1表示可卸载设备。可卸载设备如光盘、USB 等。并非能够 umount 的就是可卸载的;
  • SIZE:设备总空间大小
  • RO:是否为只读
  • TYPE:磁盘 disk、分区 part、rom、loop 等设备
  • mount:挂载点

选项

-f:查看文件系统类型和文件系统的 uuid 和挂载点

lsblk -f

每个已经格式化的文件系统都有其类型和 uuid,而没有格式化的设备,将只显示一个 Name 结果,表示该设备还未进行格式化。

50.blkid

一般仅使用其查看文件系统类型和 UUID。

blkid 查看文件系统类型和 UUID

51.parted /dev/sda print 和 fdisk -l

查看当前硬盘信息

查看硬盘信息

52.du

`du`用于评估文件的空间占用情况,它会统计每个文件大小,统计时会递归统计目录中的文件,也就是说,它会遍历整个待统计目录 ,所以统计速度可能不会理想。

一般用法:`du [OPTION]... [FILE]`

选项

-a:列出目录中的所有文件的统计信息,默认只会列出目录中子目录的统计信息,而不列出文件的统计信息

-h:人性化显示

-s:对目录做总的统计,不列出目录内文件的大小信息

-c:对给出的文件或目录做总计。在统计非同一个目录文件大小时非常有用

-d:知道显示时的目录深度,默认会递归显示所有层次

---max-depth=N:只列出给定层次的目录统计,N=0等同于-s

如果要统计的目录下挂载了一个文件系统,那么这个文件系统的大小也会被计入该目录的大小中。

(1)对目录做统计

du 统计目录大小

(2)列出指定目录的中的所有文件大小统计

du 统计指定目录中的所有文件大小

(3)列出指定目录中,递归深度为1的统计信息

统计给定层次目录的统计

(4)忽略指定文件并统计

忽略指定文件后的统计

(5)搜索符合条件的文件,然后统计它们的总大小

注意区分-c 和-s 的区别

53.df

用于报告磁盘空间的使用率,默认显示的大小是1K 大小的 block 数量,也就是以 k 为单位。

和 du 不同的是,df 是读取每个文件系统的 superblock 信息,所以评估速度非常快。由于是读取 superblock,所以如果目录下挂载了另一个文件系统,是不会将此挂载目录的文件系统计入目录大小的。du 和 df 的统计结果是不一样的。

如果 df 统计某个文件的空间使用情况,将会转而统计该文件所在文件系统的空间使用情况。

df命令

54.dumpe2fs

用于查看 ext 类文件系统的 superblock 及块组信息。使用-h 选项将只显示 superblock 信息。

55.mount

mount 用于显示挂载信息或者进行文件系统挂载,mount 不仅支持挂载非常多的文件系统,如 ext/xfs/nfs/smbfs/cifs 等,还支持共享挂载点、继承挂载点(父子关系)、绑定挂载点、移动挂载点等功能。

不同的文件系统挂载选项有所差别,在挂载过程中,如果出错,应该使用 man mount 并查看对应文件系统的挂载选项。

mount 并非只能挂载文件系统,还可以将目录挂载到另外一个目录下,实现目录的“硬链接”。默认情况下,是 无法对目录建立硬链接的,但是通过 mount 可以完成绑定,绑定后两个目录的 inode 号完全相同。

一般用法:

mount:显示当前已挂载信息

mount [-t 要挂载文件系统类型] [-o 特殊选项] 设备名 挂载目录

选项

-a:将/etc/fstab 文件里指定的挂载选项重新挂载一遍

-t:支持 ext2|3|4、vfat、fat、iso9660。不用-t 时默认调用 blkid 来获取文件系统类型

-o:指定挂载特殊选项。loop 挂载镜像文件,ro 只读挂载,rw 读写挂载,remount 重新挂载

(1)挂载 CentOS 的安装镜像到/mnt

mount /dev/cdrom /mnt

实际上/dev/cdrom 是/dev/src0的一个软链接,/dev/src0是光驱设备,所以也可以用/dev/src0进行挂载

(2)重新挂载

mount -t ext4 -o remount /dev/sdb1 /data1

(3)重新挂载文件系统为可读写

mount -t ext4 -o rw remount /dev/sdb1 /data1

(4)挂载 windows 共享目录

mount.cifs -o username="manson",passwd="123",vers=2.0 //192.168.1.105/test /mydata

win上共享文件的文件系统时 cifs 类型,要在 linux 上挂载,必须得有 mount.cifs 命令(cifs-utils 包)

对于window10或较新版本的 windows server 需要明确指定使用 cifs 的版本号为2.0。在 CentOS4-6下模块 cifs.ko 版本只能使用 SMBv1协议,CentOS7上可以使用 SMBv2或 SMBv3。

(5)基于 ssh 挂载远程目录

sshfs(fuse-sshfs 包)工具可以基于 ssh 像 NFS 一样挂载远程主机上的目录。

sshfs 192.168.100.51:/ /mnt

(6)挂载目录到另一个目录下。挂载目录和挂载点的 inode 是相同的,他们两者的内容也是完全相同的

mount --bind /mydata /mnt

(7)查看某个目录是否是挂载点

mountpoint /mydata

挂载参数信息存放在/proc/mounts(是/proc/self/mounts 的软链接)中,在/proc/self/mountstats和/proc/mountinfo 里则记录了更详细的挂载信息。

系统挂载参数信息

文件系统时需要驱动支持的,没有驱动的文件系统无法挂载,Linux 中支持的文件系统驱动在/lib/modules/$(uname -r)/kernel/fs 下

文件系统驱动

(8)挂载镜像文件

mount -o loop CentOS-7.3-x86_74-bin-DVD1.iso /mnt

(9)开机自动挂载

通过将挂载选项写入/etc/fstab 中,系统会自动挂载该文件中配置项。

注意:/etc/fstab 文件在开机的前几个过程中就会被读取,如果配置错误很可能导致开机失败。

/etc/fstab 配置文件

最后两列分别表示备份文件和开机自检,一般都可设置为0。最后一列是开机自检设置列,开机自检调用的是fsck程序,所有有些ext类文件系统作为"/"时,可能会设置为1,但是fsck是不支持xfs文件系统的,所以对于xfs文件系统而言,该项必须设置为0。其实无需考虑那么多,直接将这两列设置为0就可以了。

如果/etc/fstab 配置错误导致无法开机,这时提示输入 root 密码进入单人维护模式,此模式下根文件系统只读,应该将''/'文件系统进行重新挂载。

mount -n -o remount,rw /

56.umonut

一般用法:

umount 设备名或挂载目录

umount -lf 强制卸载

卸载时,即可以使用设备名也可以使用挂载点卸载。有时候挂载网络系统设备名很长时,指定挂载点卸载更加方便。

如果用户正在访问某个目录或文件,使得无法卸载,使用`fuser -v DIR`可以 知道谁正在访问该目录或文件,使用-k 选项 kill 掉正在使用的目录或文件的进程,使用-km 选项 kill 掉文件系统上的所有进程。

57.free

free 可以查看内存和交换分区的使用情况。

free 命令

使用`mount/lsblk`等可以查看哪个分区在充当 swap 分区。`swapon -s`也可以直接查看出

swapon -s

添加一个 swap 分区:

首先新建一个分区,在分区时指定其分区 ID 号为 SWAP 类型。mbr和gpt格式的磁盘上这个ID可能不太一样,不过一般gpt中的格式是在mbr格式的ID后加上两位数的数值,如mbr中swap的类型ID为82,在gpt中则是8200,在mbr中linux filesystem类型的ID为83,在gpt中则为8300,在mbr中lvm的ID为8e,在gpt中为8e00。

格式化为 swap 分区:mkswap /dev/sdb5

加入 swap 分区空间:swapon /dev/sdb5

取消 swap 空间:swapoff /dev/sdb5

开机自动加载 swap 分区:/etc/fstab->/dev/sdbX swap swap defaults 0 0

原理篇

机械硬盘结构(待更新)

硬盘分区方法 MBR 和 GPT

分区是为了在逻辑上将某些柱面隔开形成边界。它是以柱面为单位来划分的,首先划分外圈柱面,然后不断向内划分。

由于读写越外圈磁道中的数据比越内圈更快,所以第一个分区在读写性能上比后面的分区更好。在Windows操作系统上,C盘的速度是最快的,越后面的区越慢就是这个原因。

在磁盘数据量非常大的情况下,划分分区的好处是扫描块位图等更快速:不用再扫描整块磁盘的块位图,只需扫描对应分区的块位图。

分区方法有两种:MBR 和 GPT

MBR格式的磁盘中,会维护磁盘第一个扇区——MBR扇区,在该扇区中第446字节之后的64字节是分区表,每个分区占用16字节,所以限制了一块磁盘最多只能有4个主分区(Primary,P),如果多于4个区,只能将主分区少于4个,通过建立扩展分区(Extend,E),然后在扩展分区建立逻辑分区(Logical,L)的方式来突破4个分区的限制。

在Linux中,MBR格式的磁盘主分区号从1-4,扩展分区号从2-4,逻辑分区号从5-15,也就是最大限制是15个分区。

GPT格式突破了MBR的限制,它不再限制只能存储4个分区表条目,而是使用了类似MBR扩展分区表条目的格式,它允许有128个主分区,这也使得它可以对超过2TB的磁盘进行分区。

在MBR格式分区表中,MBR扇区占用512个字节,前446个字节是主引导记录,即boot loader。中间64字节记录着分区表信息,每个主分区信息占用16字节,因此最多只能有4个主分区,最后2个字节是有效标识位。如果使用扩展分区,则扩展分区对应的16字节记录的是指向扩展分区中扩展分区表的指针。

MBR

在MBR磁盘上,分区和启动信息是保存在一起的,如果这部分数据被覆盖或破坏,只能重建MBR。而GPT在整个磁盘上保存多个这部分信息的副本,因此它更为健壮,并可以恢复被破坏的这部分信息。GPT还为这些信息保存了循环冗余校验码(CRC)以保证其完整和正确,如果数据被破坏,GPT会发现这些破坏,并从磁盘上的其他地方进行恢复。

下面是GPT格式的分区表信息,大致约占17个字节。

GPT

EFI部分可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区区域和备份区域。

  • EFI信息区(GPT头):起始于磁盘的LBA1,通常也只占用这个单一扇区。其作用是定义分区表的位置和大小。GPT头还包含头和分区表的校验和,这样就可以及时发现错误。
  • 分区表:分区表区域包含分区表项。这个区域由GPT头定义,一般占用磁盘LBA2~LBA33扇区,每扇区可存储4个主分区的分区信息,所以共能分128个主分区。分区表中的每个分区项由起始地址、结束地址、类型值、名字、属性标志、GUID值组成。分区表建立后,128位的GUID对系统来说是唯一的。
  • GPT分区:最大的区域,由分配给分区的扇区组成。这个区域的起始和结束地址由GPT头定义。
  • 备份区:备份区域位于磁盘的尾部,包含GPT头和分区表的备份。它占用GPT结束扇区和EFI结束扇区之间的33个扇区。其中最后一个扇区用来备份1号扇区的EFI信息,其余的32个扇区用来备份LBA2~LBA33扇区的分区表。

添加硬盘

正常情况下,添加磁盘后需要重启系统才能被内核识别,在/dev/下才有对应的设备号,使用fdisk -l才会显示出来。但是有时候不方便重启,所以下面介绍一种磁盘热插拔方式。

查看主机 scsi 总线号:

查看主机 scsi 总线号

重新扫描 scsi 总线以热插拔方式添加设备:

重新扫描 scsi 总线

如果scsi_host目录系很多hostN目录,则使用循环来完成。

# ls /sys/class/scsi_host/
host0   host11  host14  host17  host2   host22  host25  host28  host30  host4  host7
host1   host12  host15  host18  host20  host23  host26  host29  host31  host5  host8
host10  host13  host16  host19  host21  host24  host27  host3   host32  host6  host9

# for i in /sys/class/scsi_host/host*/scan;do echo "- - -" >$i;done

参考链接

http://www.cnblogs.com/f-ck-need-u/p/7048971.html

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券