目录

8.2 磁盘与文件系统的管理命令

磁盘使用与文件系统管理介绍

/images/linux_mt/linux_mt.jpg

本节,我们来学习磁盘和文件系统管理的相关命令,我们将按照从磁盘到创建一个可用的文件系统的顺序,逐步讲解相关命令的使用,内容如下:

  1. 磁盘分区
  2. 重载内核分区表
  3. 文件系统管理
  4. 挂在文件系统
  5. 其他相关命令

1. 磁盘进行分区

磁盘分区管理主要有 fdiskpartedsfdisk 三个命令。掌握一个即可,我们主要来学习 fdiskfdisk 提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能;所有的操作均在内存中完成,不会直接同步到磁盘,直到使用w命令保存至磁盘上。fdisk 命令的使用方式如下

查看磁盘的分区信息:

fdisk -l [device...]

  • 作用: 列出指定磁盘设备上的分区情况,默认列出所有磁盘设备的分区情况
  • 参数: device 设备文件名

cat /proc/partitions

  • 作用: 查看内核分区信息

管理分区

fdisk device

  • 作用: 管理分区,进入 fdisk 交互式管理界面
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# fdisk 使用示例
> fdisk /dev/nvme0n1
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
欢迎使用 fdisk (util-linux 2.23.2)
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):m
命令操作
   d   删除已有分区
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   列出所有的分区类型
   m   查看帮助信息
   n   创建新分区
   o   create a new empty DOS partition table
   p   显示现有分区信息
   q   不保存并退出
   s   create a new empty Sun disklabel
   t   修改分区类型
   v   verify the partition table
   w   保存并退出
   x   extra functionality (experts only)

2. 重载内存分区表

在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别;需要通知内核强制重读磁盘分区表。可用命令有如下三个:

partprobe

partprobe [device]

  • 作用: inform the OS of partition table changes
  • 附注: CentOS 5 仅能使用此命令

partx

partx [-a|-u] device

  • 作用: tell the Linux kernel about the presence and numbering of on-disk partitions
  • 选项:
    • -a: 向内核添加所有分区表
    • -u: 向内核更新分区表
    • -l: 列出分区表
    • -s, --show: 显示分区表详细信息
    • -n, --nr M:N: 与 -s一起使用,限制显示的行
    • -o, --output list: 与 -s一起使用,限制显示的列

kpartx

kpartx -af device

  • 作用: Create device maps from partition tables

3. 文件系统管理

3.1 文件系统创建

Windows无法识别Linux的文件系统; 因此,存储设备需要两种系统之间交叉使用时,应该使用windows和Linux同时支持的文件系统:fat32(vfat)。mkfs.vfat device

mkfs

mkfs -t fs_type device

  • 作用: 通用的文件系统创建命令,内部会调用特定文件系统的创建命令
  • 选项: -t 指定要创建的文件系统
  • eg: mkfs -t ext4 /dev/sda1 == mkfs.ext4 /dev/sda1
1
2
> mkfs
mkfs         mkfs.btrfs   mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.fat     mkfs.minix   mkfs.msdos   mkfs.vfat    mkfs.xfs

mke2fs

mke2fs [OPTIONS] device

  • 作用: ext系列文件系统专用创建工具
  • 选项:
    • -t {ext2|ext3|ext4}
      • 指明要创建的文件系统类型
      • mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4
    • -b {1024|2048|4096}:指明文件系统的块大小;
    • -L LABEL:指明卷标;
    • -j
      • 创建有日志功能的文件系统ext3;
      • mke2fs -j = mke2fs -t ext3 = mkfs - t ext3 = mkfs.ext3
    • -i #:bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个Indode;
    • -N #:直接指明要给此文件系统创建的inode的数量;
    • -m #:指定预留的空间,百分比;
    • -O [^]FEATURE:以指定的特性创建目标文件系统;

mkswap

mkswap [OPTIONS] device

  • 作用: 创建swap文件系统
  • 选项:
    • -L LABEL:指明卷标
    • -f:强制创建
  • 附注:
    • Linux上的交换分区必须使用独立的swap文件系统;
    • 且文件系统的System ID必须为82;

swapon [OPTION] [DEVICE]

  • 作用: 启用交换分区
  • 选项:
    • -a 启用定义在/etc/fstab文件中的所有swap设备;
    • -p #: 指定此交换设备的优先级

swapoff DEVICE

  • 作用: 禁用交换分区

3.2 文件系统查看和修改

e2label

  • 作用: 查看与设定 ext 系列文件系统的卷标
  • 查看: e2label device
  • 设定: e2label device LABEL

dumpe2fs

dumpe2fs [-h] device

  • 作用: 显示 ext 系列文件系统的属性信息
  • 选项: -h 仅显示超级块信息

tune2fs

tune2fs [OPTIONS] device

  • 作用: 查看或修改ext系列文件系统的某些属性
  • 注意:块大小创建后不可修改;
  • 选项:
    • -l:查看超级块的内容;
    • -j:启动日志功能,即将 ext2 转换为 ext3;
    • -L LABEL:修改卷标;
    • -m #:调整预留空间百分比,后跟数字标直接表示百分之几;
    • -O [^]FEATHER:开启或关闭某种特性;
    • -o [^]mount_options:开启或关闭某种默认挂载选项
      • tune2fs -0 acl /dev/sda1: 开启访问控制列表功能
      • tune2fs -0 ^acl /dev/sda1: 关闭访问控制列表功能

blkid

blkid

  • 作用: 显示块设备属性,主要是显示文件系统类型
  • blkid device: 查看特定设备所有分区文件系统的类型和属性
  • blkid -L LABEL:根据LABEL定位设备
  • blkid -U UUID:根据UUID定位设备

3.3 文件系统检查

因进程意外中止或系统崩溃等原因导致定稿操作非正常终止时,可能会造成文件损坏;此时,应该检测并修复文件系统。建议离线进行,不能让其他用户在正在修复的文件系统中读写文件。Linux 上的文件系统检测工具 fsckmkfs 一样是一个通用的文件系统修复工具

fsck

fsck -t fs_type device

  • 作用: check and repair a Linux file system
  • 选项:
    • -t fstype: 指明文件系统类型;
    • -a:无须交互而自动修复所有错误;
    • -r:交互式修复
  • eg: fsck -t ext4 = fsck.ext4

e2fsck

e2fsck [OPTIONS] device

  • 作用: ext系列文件系统的专用工具
  • 选项:
    • -y: 对所有问题自动回答为yes;
    • -f:即使文件系统处于clean状态,也要强制进行检测

4. 文件系统挂载

根文件系统这外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”。Linux 中用于挂载和卸载的命令是 mount,umount

挂载点,即用于作为另一个文件系统的访问入口,应该具有如下特性:

  • 事先存在;
  • 应该使用未被或不会被其它进程使用到的目录;
  • 挂载点下原有的文件将会被隐藏;

4.1 文件系统挂载

mount [option]... [-t fstype] [-o option] 设备 挂载点

  • 作用: 将设备挂载至特定目录
  • 设备:
    • 设备文件: /dev/sda
    • 卷标: -L 卷标
    • UUID: -U UUID
  • 常用的挂载选项:
    • -r: readonly, 只读挂载
    • -w: read and write, 读写挂载
    • -t fstype:指明要挂载的设备上的文件系统的类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型;
    • -L LABEL:以卷标方式指定设备, mount -L MYDATA 挂载点
    • -U UUID: 以UUID的方式指定设备,mount -U uuid 挂载点
    • -a: 自动挂载所有(/etc/fstab文件中定义的)支持自动挂载的设备
    • -n: 默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性;
    • -B --bind: 绑定到目录到另一个目录上
  • -o option: 挂载文件系统的选项
    • async:异步I/O,数据写操作先于内存完成,而后再根据某种策略同步至持久设备中
    • sync: 同步I/O,
    • atime/noatime: 文件和目录被访问时是否更新最近一次的访问时间戳
    • auto/noauto:设备是否支持mount的-a选项自动挂载
    • diratime/nodiratime: 目录被访问时是否更新最近一次的访问时间戳
    • dev/nodev: 是否支持在此设备上使用设备;
    • user/nouser: 是否允许普通用户挂载此文件设备
    • exec/noexec: 是否允许执行此设备上的二进制程序文件
    • suid/nosuid: 是否支持在此设备的文件上使用suid
    • ro: 只读
    • rw: 读写
    • remount: 重新挂载,通常用于不卸载的情况下重新指定挂载选项
    • acl: 启用此文件系统的 acl 功能,默认不支持;
    • defaults: 默认选项 rw, suid, dev, exec, auto, nouser, and async
  • eg:
    • mount -o acl DEVICE MOUNT_POINT: 挂载后启动 acl 选型
    • tune2fs -o acl DEVICE 为设备设定默认挂载选项,启动 acl
    • mount -o remount,ro /dev/sda: 以只读方式重新挂载

4.2 查看已挂载的设备

查看已挂载的设备可使用如下三个命令

  1. mount
  2. cat /etc/mtab
  3. cat /proc/mounts

4.3 特殊设备挂载

挂载文件

mount --bind 源目录 目标目录:

  • 作用: 可以实现将目录绑定至另一个目录上,作为其临时访问入口;

挂载光盘

mount -r /dev/cdrom mount_point

  • 光盘设备文件:
    • IDE 接口的光盘: /dev/hdc
    • SATA接口的光盘: /dev/sr0
    • 符号链接文件:
      • /dev/cdrom
    • /dev/cdrw: rw 表示是可写光盘
    • /dev/dvd
    • /dev/dvdrw: rw 表示可写 dvd

挂载本地的回环设备

mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT

4.4 文件系统卸载

umount device|dir

  • 作用: 卸载设备
  • 参数: 设备文件或挂载点
  • 注意:正在被进程访问到的挂载点无法被卸载,要想查看设备被哪个或哪些进程所战用,可以使用如下命令
    • lsof MOUNT_POINT: 查看占用设备的进程
    • fuser -v MOUNT_POINT: 查看占用设备的用户
    • fuser -km MOUNT_POINT: 终止所有正在访问某挂载点的进程

4.5 自动挂载

/etc/fstab文件可用于配置除根文件系统以外的其它文件系统在开机时自动挂载。每行定义一个要挂载的文件系统及相关属性,每行有 6 个字段,从左往右各个字段的含义如下。使用 mount -a 可自动挂载定义在此文件中的所支持自动挂载的设备。需要额外注意的是swap 分区的挂载点永远是 swap, 且自动使用 swapon 挂载

  1. 挂载的设备:
    • 设备文件
    • LABEL=""
    • UUID=""
    • 伪文件系统名称: proc, sysfs, devtmpfs, configfs
  2. 挂载点:
  3. 文件系统类型
  4. 挂载选项:
    • 挂载选项可以有多个,彼此间使用逗号分隔;
  5. 转储频率:作用不大,大多数是 0
    • 0:从不转储
    • 1: 每天转储
    • 2: 每隔一天
  6. 自检次序:
    • 0:不自检,额外创建的文件系统都无须自动自检
    • 1:首先自检,通常只有根文件系统需要首先自检
    • 2:次级自检,不同的设备可以使用同一个自检次序
    • 3
    • ….

5. 其他相关命令

其他命令主要包括如下几个命令:

  1. 手动创建设备文件的 mknod 命令
  2. 查看磁盘使用量的 df 命令
  3. 查看文件夹大小的 du 命令

mknod

mknod [OPTION]... NAME TYPE [MAJOR MINOR]

  • 作用: 可用于手动创建字符或块设备文件
  • 选项: -m MODE:创建后的设备文件的访问权限

df

df [OPTION]... [FILE]...

  • 作用: 查看已挂载设备的磁盘使用量
  • 选项:
    • -l:仅显示本地挂载设备的相关信息;
    • -h:human-readable,以易读的方式显示磁盘使用量
    • -i:显示inode的使用状态而非blocks
    • -P, --portability: 使用POSIX格式输出,不会出现换行

du

du [OPTION]... [FILE]...

  • 作用: 查看文件夹的大小
  • 选项:
    • -s: sumary,只显示文件夹的总大小
    • -h: human-readable 以人类易读方式显示容量大小
1
2
3
4
5
6
7
练习:
1、创建一个10G的分区,并格式化为ext4文件系统;
  (1) block大小为2048;预留空间为2%,卷标为MYDATA;
  (2) 挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;
  (3) 可开机自动挂载;

2、创建一个大小为1G的swap分区,并启动之;