一、磁盘与文件系统命令
1.1 mount
1.1.1 介绍
mount
是 Linux 和其他类 Unix 系统中的一个命令,用于挂载文件系统到指定的挂载点(目录)
1.1.2 使用方法
mount [-t type] [-o options] device_name mount_point
1.1.3 参数详解
device_name
:要挂载的设备或文件系统的名称。mount_point
:挂载点,即文件系统在系统中的访问路径。-t type
:指定文件系统的类型(如 ext4、vfat、ntfs 等)。-o options
:指定挂载选项,如ro
(只读)、rw
(读写)等。
1.1.4 常见使用案例
1.1.4.1 挂载 USB 设备
如果 USB 设备被识别为 /dev/sdb1
,并且你想将其挂载到 /mnt/usb
目录,可以使用以下命令
sudo mount /dev/sdb1 /mnt/usb
1.1.4.2 挂载网络文件系统
假设你要挂载一个 NFS 共享,可以使用以下命令
sudo mount -t nfs server:/path/to/share /mnt/nfs
1.1.5 注意事项
- 挂载和卸载文件系统通常需要 root 权限。
- 在挂载之前,确保挂载点目录已经存在。
- 不同的文件系统类型可能需要不同的选项和配置。
- 在卸载文件系统之前,确保没有进程正在使用该文件系统。
1.2 umount
1.2.1 介绍
umount
是 Linux 和其他类 Unix 系统中的一个命令,用于卸载(卸载)已经挂载的文件系统
1.2.2 使用方法
umount [options] mount_point
1.2.3 参数详解
mount_point
:要卸载的文件系统的挂载点路径。[options]
:可选的参数,如-f
(强制卸载,即使文件系统正在使用)或-l
(懒惰卸载,仅当没有进程使用时才卸载)。
1.2.4 常见使用案例
1.2.4.1 卸载挂载在 /mnt/usb
的 USB 设备
sudo umount /mnt/usb
1.2.4.2 强制卸载
如果文件系统正在被某个进程使用,你可能需要使用 -f
选项来强制卸载
sudo umount -f /mnt/usb
1.2.5 注意事项
- 在卸载文件系统之前,确保没有进程正在使用它。你可以使用
lsof
或fuser
命令来检查哪些进程正在使用挂载点上的文件。 - 如果尝试卸载正在使用的文件系统,
umount
命令通常会失败,并显示一个错误消息。 - 使用
-f
选项强制卸载可能会导致数据损坏,因此应该谨慎使用。 - 卸载文件系统通常需要 root 权限。
1.3 fsck
1.3.1 介绍
fsck
(文件系统一致性检查)是一个用于检查和修复文件系统错误的命令行工具
1.3.2 使用方法
sudo fsck [文件系统类型] [设备名称]
1.3.3 参数详解
[文件系统类型]
:指定要检查的文件系统类型(如 ext4, xfs, btrfs 等)。[设备名称]
:指定要检查的设备或分区名称(如/dev/sda1
)。
1.3.4 常见使用案例
1.3.4.1 要检查 /dev/sda1
分区上的 ext4 文件系统
sudo fsck.ext4 /dev/sda1
1.3.5 注意事项
-
文件系统挂载状态:在运行
fsck
之前,必须确保文件系统是未挂载的或者处于只读模式。如果文件系统是挂载的并且处于读写模式,fsck
可能无法正确运行或可能损坏文件系统。 -
备份数据:在运行
fsck
之前,强烈建议备份重要数据。虽然fsck
旨在修复文件系统,但在某些情况下,它可能会导致数据丢失。 -
强制检查:你可以通过在
/etc/fstab
文件中为特定分区设置fsck.passno
和fsck.order
参数来强制在系统启动时检查文件系统。然而,这应该在你知道文件系统存在问题,并且愿意承担相应风险的情况下进行。 -
自动修复:在某些情况下,
fsck
可以自动修复检测到的文件系统错误。然而,对于更复杂的错误,它可能只能提供一个报告,并需要管理员手动干预来解决问题。 -
系统日志:
fsck
的输出和任何潜在错误都会记录在系统日志中,通常可以在/var/log/syslog
或/var/log/messages
中找到。
1.4 dd
1.4.1 介绍
dd
是一个在 Unix 和类 Unix 系统中非常强大的命令行工具,用于以块为单位复制和转换文件
1.4.2 使用方法
dd if=输入文件 of=输出文件 [选项]
1.4.3 参数详解
bs=块大小
:设置数据块的大小,例如bs=1M
表示 1 兆字节。count=块数
:仅复制指定数量的数据块。skip=块数
:跳过输入文件中的指定数量数据块。seek=块数
:在输出文件中跳过指定数量数据块后再开始写入。conv=转换
:应用一个或多个转换操作,例如notrunc
(不截断输出文件)、noerror
(出错时不停止)等。
1.4.4 常见使用案例
1.4.4.1 复制文件
将 file1.txt
复制到 file2.txt
dd if=file1.txt of=file2.txt
1.4.4.2 创建磁盘镜像
将整个磁盘 /dev/sda
的内容复制到文件 disk_image.img
dd if=/dev/sda of=disk_image.img
1.4.4.3 恢复丢失的数据
从备份镜像 disk_image.img
中恢复第一个分区的内容到 /dev/sda1
dd if=disk_image.img of=/dev/sda1 bs=4M
1.4.4.4 生成随机数据
生成 1MB 的随机数据并保存到 random_data.bin
dd if=/dev/urandom of=random_data.bin bs=1M count=1
1.4.5 注意事项
- 使用
dd
命令时要格外小心,因为它可以直接访问磁盘和设备,并且可能会导致数据丢失或损坏。 - 在使用
dd
命令复制或操作磁盘时,确保指定了正确的输入和输出文件或设备。 dd
命令可能会非常慢,特别是在处理大文件或磁盘镜像时。- 在执行可能覆盖现有数据的操作之前,务必备份重要数据。
1.5 dumpe2fs
1.5.1 介绍
dumpe2fs
是一个用于查看和打印 Linux 中 ext2、ext3、ext4 文件系统超级块的工具
1.5.2 使用方法
dumpe2fs [选项] 设备文件名
1.5.3 参数详解
-h
:显示超级块的内容。-b
:指定超级块的块号。-i
:显示文件系统状态信息。-I
:显示文件系统的 inode 信息。-n
:以“易读”的方式显示信息,这通常会提供更简洁的输出。-s
:显示文件系统的摘要信息。-x
:显示扩展属性。
1.5.4 常见使用案例
1.5.4.1 显示文件系统摘要信息
dumpe2fs -s /dev/sda1
1.5.4.2 以易读方式显示文件系统信息
dumpe2fs -n /dev/sda1
1.5.4.3 显示超级块内容
dumpe2fs -h /dev/sda1
1.5.5 注意事项
dumpe2fs
需要对指定的设备具有读取权限,因此通常需要以 root 用户身份运行。- 在使用
dumpe2fs
时,应确保指定的设备或分区不是挂载的或至少是以只读方式挂载的,以避免对文件系统造成潜在损害。 dumpe2fs
输出的信息对于理解文件系统的结构和状态非常有用,但它本身并不提供修复文件系统的功能。如果需要修复,可以使用fsck
命令。
1.6 dump
1.6.1 介绍
dump
命令在 Linux 系统中用于备份文件系统
1.6.2 使用方法
dump [选项] [级别] 设备文件名 [目录]
1.6.3 参数详解
-0
至-9
:指定备份级别。0 表示完全备份,1 表示第一次增量备份,以此类推。-u
:更新备份的日期和时间。-f
:指定备份文件的名称(而不是使用设备文件名)。-l
:列出备份文件的内容。-L
:指定备份的标签。-v
:详细输出。-j
:使用bzip2
进行压缩。-z
:使用gzip
进行压缩。
1.6.4 常见使用案例
1.6.4.1 完全备份 /home
目录到 /dev/st0
磁带设备
dump 0 /dev/st0 /home
1.6.4.2 增量备份 /home
目录到 /dev/st0
磁带设备
dump 1 /dev/st0 /home
1.6.5 注意事项
dump
命令通常与磁带设备一起使用,但也可以将备份写入普通文件或分区。- 备份级别决定了备份的类型和范围。完全备份(级别 0)包括文件系统中的所有文件,而增量备份(级别 1 及以上)只包括自上次相同级别或更低级别备份以来更改的文件。
- 备份文件通常包含时间戳和文件系统信息,以便
restore
命令可以正确地恢复数据。 - 使用
dump
和restore
时,应确保理解备份和恢复过程,以避免数据丢失或损坏。
1.7 fdisk
1.7.1 介绍
fdisk
是一个用于磁盘分区表操作的命令行工具
1.7.2 使用方法
fdisk [设备名称]
1.7.3 参数详解
p
:打印分区表。n
:创建一个新的分区。d
:删除一个分区。t
:更改分区的类型。w
:将更改写入磁盘并退出。q
:不保存更改并退出。m
:显示帮助菜单。
1.7.4 常见使用案例
1.7.4.1 查看分区表
sudo fdisk -l /dev/sda
1.7.4.2 进入交互模式并创建一个新分区
sudo fdisk /dev/sda
Command (m for help): n
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-20971519, default 2048):
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
1.7.5 注意事项
- 使用
fdisk
时必须非常小心,因为错误的操作可能会导致数据丢失。 - 在对磁盘进行分区操作之前,务必备份重要数据。
- 在进行分区更改后,使用
w
命令将更改写入磁盘之前,可以使用q
命令退出而不保存更改。 - 在处理系统引导分区或包含关键数据的分区时,务必格外小心。
1.8 parted
1.8.1 介绍
parted
是一个功能强大的磁盘分区和分区表操纵工具,它支持多种文件系统类型,并提供了丰富的命令行界面来管理磁盘分区
1.8.2 使用方法
parted [设备名称] [命令]
1.8.3 参数详解
print
:显示分区表信息。mkpart
:创建新分区。rm
:删除分区。resizepart
:调整分区大小。move
:移动分区。copy
:复制分区。set
:设置分区的属性,如文件系统类型。quit
:退出parted
。
1.8.4 常见使用案例
1.8.4.1 查看磁盘分区信息
sudo parted /dev/sda print
1.8.4.2 创建一个新的分区
sudo parted /dev/sda mkpart primary ext4 1GB 2GB
1.8.4.3 删除一个分区
sudo parted /dev/sda rm 1
1.8.4.4 调整分区大小
sudo parted /dev/sda resizepart 1 END
1.8.5 注意事项
parted
是一个强大的工具,使用时需要小心谨慎,以避免数据丢失。- 在执行任何分区操作之前,务必备份重要数据。
parted
支持多种分区表类型,包括 MBR 和 GPT,因此可以根据需要选择合适的分区表类型。- 在进行分区更改后,可能需要更新文件系统以匹配新的分区大小,这可以使用
resize2fs
(对于 ext2/ext3/ext4 文件系统)等工具完成。
1.9 mkfs
1.9.1 介绍
mkfs
(make filesystem)是一个用于在磁盘分区上创建文件系统的命令
1.9.2 使用方法
mkfs [选项] 文件系统类型 设备名称
1.9.3 参数详解
不同的文件系统类型可能支持不同的选项。以下是一些常见文件系统类型的常用选项:
- 对于
ext4
文件系统:-m
:设置保留的块百分比。-O
:启用或禁用特定的特性。-L
:设置文件系统的标签。
- 对于
vfat
文件系统:-F
:指定 FAT 类型(12、16 或 32)。-n
:设置卷标。
1.9.4 常见使用案例
1.9.4.1 在 /dev/sda1
分区上创建一个 ext4 文件系统
sudo mkfs.ext4 /dev/sda1
1.9.4.2 在 /dev/sdb1
分区上创建一个 FAT32 文件系统
sudo mkfs.vfat /dev/sdb1
1.9.5 注意事项
- 在使用
mkfs
命令之前,请确保分区上的所有数据都已备份,因为此命令会删除分区上的所有数据并创建一个新的文件系统。 - 使用正确的设备名称和分区编号非常重要,以避免错误地格式化错误的分区或设备。
- 不同的文件系统类型支持不同的选项,因此请查阅相关手册页(使用
man mkfs.文件系统类型
)以获取特定文件系统的可用选项。
1.10 partprobe
1.10.1 介绍
partprobe
是一个用于通知内核重新读取分区表的工具
1.10.2 使用方法
sudo partprobe [设备名称]
1.10.3 常见使用案例
1.10.3.1 假设你使用 fdisk
在 /dev/sda
上创建了一个新的分区,并希望让内核立即识别这个新分区,你可以执行
sudo partprobe /dev/sda
1.10.4 注意事项
- 在使用
partprobe
之前,确保你已经使用fdisk
、parted
或其他工具完成了分区表的更改。 partprobe
通常不需要重启系统就可以让内核识别新的分区或分区更改。- 在某些情况下,可能需要多次运行
partprobe
才能确保内核完全识别所有更改。 partprobe
通常与kpartx
工具一起使用,后者可以映射分区到设备文件,使得它们可以像块设备一样被访问。
1.10.5 与其他工具关系
kpartx
:这个工具用于创建和管理内核分区映射,它可以将分区映射为设备文件,这样用户空间程序就可以像访问常规块设备一样访问它们。udev
:在现代 Linux 系统中,udev
负责管理设备节点和设备事件。当udev
检测到分区表更改时,它会自动重新加载分区信息,因此在许多情况下,你可能不需要手动运行partprobe
。然而,在某些情况下,特别是在手动更改分区表或在没有udev
规则的情况下,手动运行partprobe
可能是必要的。
1.11 e2fsck
1.11.1 介绍
e2fsck
是用于检查 ext2/ext3/ext4 文件系统一致性的工具
1.11.2 使用方法
e2fsck [选项] 设备名称
1.11.3 参数详解
-f
:强制检查,即使文件系统被认为是干净的。-y
:自动回答所有提示为“是”(yes),这意味着e2fsck
将尝试修复所有发现的问题而不需要用户干预。-n
:只读取文件系统而不进行任何更改,用于获取文件系统状态信息。-v
:详细模式,显示更多的检查信息。-p
:自动修复文件系统(只有在-y
选项被指定时有效)。
1.11.4 常见使用案例
1.11.4.1 检查 /dev/sda1
分区上的 ext4 文件系统
sudo e2fsck -f /dev/sda1
1.11.4.2 以只读模式检查文件系统
sudo e2fsck -n /dev/sda1
1.11.5 注意事项
- 在文件系统挂载为读写状态时运行
e2fsck
可能会导致数据损坏,因此通常建议在文件系统未挂载或处于只读模式下运行它。 - 在系统启动时,如果文件系统被标记为需要检查(通常是因为检测到不一致),
e2fsck
会自动运行。在这种情况下,你应该允许它完成检查,而不是跳过。 - 在运行
e2fsck
之前,始终确保已经备份了重要数据,以防止数据丢失。 - 如果
e2fsck
报告了无法修复的错误,你可能需要考虑从备份中恢复数据或寻求专业的数据恢复服务。
1.11.6 与其他工具关系
fsck
:这是一个通用的文件系统检查工具,它可以根据文件系统的类型调用相应的检查工具,例如e2fsck
。如果你不确定要使用哪个检查工具,可以尝试运行fsck
。mke2fs
:这是一个用于创建 ext2/ext3/ext4 文件系统的工具。当你需要创建新的文件系统时,可以使用这个工具。tune2fs
:这个工具用于调整 ext2/ext3/ext4 文件系统的参数,例如修改挂载选项、调整保留块百分比等。
1.12 mkswap
1.12.1 介绍
mkswap
是一个用于设置交换分区的命令
1.12.2 使用方法
sudo mkswap /dev/设备名称
1.12.3 常见使用案例
1.12.3.1 设置 /dev/sdb1
分区为交换分区并启用它
sudo mkswap /dev/sdb1
sudo swapon /dev/sdb1
1.12.3.2 你可以通过编辑 /etc/fstab
文件来在系统启动时自动启用交换分区。在文件中添加一行类似以下内容
/dev/sdb1 none swap sw 0 0
1.12.4 注意事项
- 在设置交换分区之前,请确保该分区没有被格式化为其他类型的文件系统。
- 交换分区的性能通常比物理内存差,因此不建议将大量空间用作交换分区。通常,交换分区的大小设置为物理内存的两倍是一个好的起点。
- 如果你的系统已经有一个交换分区或交换文件,并且你想要添加更多的交换空间,你可以创建多个交换分区或交换文件,并在
/etc/fstab
文件中配置它们。 - 在使用
mkswap
和swapon
时,确保你有足够的权限(通常需要使用sudo
)。
1.12.5 与其他工具关系
swapon
:用于启用或禁用交换分区。swapoff
:用于禁用交换分区。free
:用于查看系统的内存和交换空间使用情况。vmstat
:用于报告关于进程、内存、分页、块IO、陷阱和CPU活动的信息。
1.13 swapon
1.13.1 介绍
swapon
是一个用于启用交换分区的命令
1.13.2 使用方法
sudo swapon /dev/设备名称
或者,如果你已经使用 mkswap
命令创建了一个交换文件,你可以这样启用它
sudo swapon /路径/到/交换文件
1.13.3 常见使用案例
1.13.3.1 启用 /dev/sdb1
分区作为交换分区
sudo swapon /dev/sdb1
1.13.3.2 如果之前使用 dd
命令创建了一个 2G 的交换文件 /swapfile
,可以这样启用它
sudo swapon /swapfile
1.13.3.3 持久化配置
如果你想在系统启动时自动启用交换分区,你需要在 /etc/fstab
文件中添加相应的条目。对于分区,条目可能类似于
/dev/sdb1 none swap sw 0 0
对于交换文件,你需要先确保文件已经被正确格式化为交换空间(使用 mkswap
),然后在 /etc/fstab
中添加类似下面的条目
/path/to/swapfile none swap sw 0 0
1.13.4 注意事项
- 在启用交换分区之前,确保该分区或文件已经被正确地设置和格式化为交换空间。
- 交换分区的性能通常比物理内存差,因此应该谨慎使用,并且只在必要时启用。
- 交换空间的大小应该根据系统需求和可用磁盘空间来合理配置。
- 使用
swapon
和swapoff
时需要具有相应的权限,通常需要使用sudo
。
1.13.5 与其他工具关系
mkswap
:用于创建交换分区或交换文件。swapoff
:用于停用交换分区或交换文件。free
:显示系统内存和交换空间的使用情况。vmstat
:报告关于进程、内存、分页、块IO、陷阱和CPU活动的信息。
1.14 swapoff
1.14.1 介绍
swapoff
是一个用于停用交换分区的命令
1.14.2 使用方法
sudo swapoff /dev/设备名称
或者,如果你停用的是一个交换文件,则使用
sudo swapoff /路径/到/交换文件
1.14.3 常见使用案例
1.14.3.1 停用 /dev/sdb1
分区作为交换分区
sudo swapoff /dev/sdb1
1.14.3.2 停用之前启用的交换文件 /swapfile
sudo swapoff /swapfile
1.14.3.3 查看交换空间状态
在停用交换分区之后,你可以使用 free
命令或 swapon --show
命令来确认交换空间是否已经被停用
free -h
或者
swapon --show
swapon --show
命令将列出所有当前启用的交换分区和文件。如果停用的分区或文件不再列出,那么它们已经被成功停用
1.14.4 注意事项
- 在停用交换分区之前,确保系统具有足够的物理内存来支持当前运行的进程。停用交换分区可能会导致内存不足,如果系统没有足够的物理内存,可能会导致性能下降或程序崩溃。
- 在系统启动时,交换分区通常会自动启用,除非你在
/etc/fstab
文件中进行了相应的配置。如果你停用了交换分区,并且不想在系统启动时再次启用它,确保从/etc/fstab
文件中删除或注释掉相应的条目。 - 使用
swapoff
命令需要具有相应的权限,通常需要使用sudo
。
1.14.5 与其他工具关系
swapon
:用于启用交换分区或交换文件。mkswap
:用于创建交换分区或交换文件。free
:用于显示系统内存和交换空间的使用情况。vmstat
:报告关于进程、内存、分页、块IO、陷阱和CPU活动的信息。
1.15 sync
1.15.1 介绍
sync
是一个在 Linux 和其他类 Unix 系统中用于确保所有挂起的写操作都被传输到磁盘上的命令
1.15.2 使用方法
sync
1.15.3 常见使用案例
1.15.3.1 同步所有挂起的写操作到磁盘
sync
1.15.4 注意事项
sync
命令只会同步那些被标记为需要写入的文件,而不是所有文件。这意味着它只会确保到目前为止所有已知的更改都被写入到磁盘上。- 在大多数情况下,你不需要手动执行
sync
命令,因为现代操作系统和文件系统通常会在适当的时候自动执行同步操作,例如在系统关闭或重启时。 - 频繁地执行
sync
命令可能会对系统性能产生负面影响,因为它会强制内核立即执行磁盘写操作,而不是让它们按照内核认为的最优方式异步执行。
1.15.5 与其他工具关系
fsync
:这是一个系统调用,与sync
命令类似,但它是针对单个文件或文件描述符的。当你想确保对特定文件的更改被写入磁盘时,可以使用fsync
。fdatasync
:另一个系统调用,类似于fsync
,但它只同步文件的数据部分,而不包括文件的元数据(如修改时间和访问权限)。umount
:当你卸载一个文件系统时,umount
命令会确保所有挂起的写操作都被同步到磁盘上,然后再卸载文件系统。
1.16 resize2fs
1.16.1 介绍
resize2fs
是一个用于调整 ext2、ext3 或 ext4 文件系统大小的工具
1.16.2 使用方法
resize2fs /dev/设备名称
1.16.3 常见使用案例
1.16.3.1 扩大文件系统以使用整个分区空间
如果你刚刚使用 fdisk
、parted
或 gparted
等工具扩大了分区,你可以使用 resize2fs
来扩展文件系统以使用整个分区空间
sudo resize2fs /dev/sda1
1.16.3.2 缩小文件系统
缩小文件系统通常不是一个推荐的操作,因为它可能会导致数据丢失。如果你确实需要缩小文件系统,你应该首先确保分区中有足够的未使用空间,然后使用 resize2fs
sudo resize2fs /dev/sda1 10G
这将把 /dev/sda1
文件系统的大小调整为 10GB
1.16.4 注意事项
- 在调整文件系统大小之前,确保备份所有重要数据,以防万一发生数据丢失。
- 缩小文件系统时特别小心,因为这可能会导致数据丢失。通常建议只扩大文件系统。
- 如果你的分区使用了 LVM(逻辑卷管理),则可以通过调整逻辑卷的大小来间接调整文件系统大小,而不需要直接使用
resize2fs
。 - 对于其他类型的文件系统(如 XFS、Btrfs 等),需要使用不同的工具来调整大小,例如
xfs_growfs
对于 XFS 文件系统。
1.16.5 与其他工具关系
fdisk
、parted
、gparted
:这些工具用于调整分区的大小。在调整分区大小之后,你需要使用resize2fs
或其他相应的工具来调整文件系统的大小。e2fsck
:在调整文件系统大小之前,可能需要使用e2fsck
来检查文件系统的完整性。xfs_growfs
、btrfs
文件系统工具等:对于非 ext 类型的文件系统,需要使用不同的工具来调整大小。