磁盘和文件系统管理

前言

之前简单介绍过磁盘分区(《Linux 分区工具 fdisk 的简单使用》),现在就来说说分区后的磁盘,怎样格式化及挂载。

创建文件系统

创建工具

创建文件系统,一般来说只需要 mkfs系 的命令就可以搞定了,如:

1
2
3
mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...

mkfs.xxx device;

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

ext 系列文件系统专用管理工具: mke2fs

1
2
3
4
5
6
7
8
9
10
11
mke2fs [OPTIONS]  device
-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 number:bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个Indode;
-N number:直接指明要给此文件系统创建的inode的数量;
-m number:指定预留的空间,百分比;
-O [^]FEATURE:以指定的特性创建目标文件系统;

swap 文件系统创建: mkswap

Linux 上的交换分区必须使用独立的文件系统,且文件系统的 System ID 必须为 82

[OPTIONS] device
1
2
-L LABEL:指明卷标
-f:强制

卷标设定

卷标的查看和设定工具: e2label

查看: e2label device

设定: e2label device LABEL

检测及修复文件系统

tune2fs命令 :查看或修改 ext 系列文件系统的某些属性。

注意:块大小创建后不可修改。

[OPTIONS] device
1
2
3
4
5
6
7
8
9
10
    -l:查看超级块的内容;

修改指定文件系统的属性:
-j:ext2 --> ext3;
-L LABEL:修改卷标;
-m number:调整预留空间百分比;
-O [^]FEATHER:开启或关闭某种特性;
-o [^]mount_options:开启或关闭某种默认挂载选项
开启:acl
关闭:^acl

因进程意外中止或系统崩溃等原因导致定稿操作非正常终止时,可能会造成文件损坏。此时,应该检测并修复文件系统(建议离线进行)。

ext 系列文件系统的专用修复工具: e2fsck 。

[OPTIONS] device
1
2
-y:对所有问题自动回答为yes; 
-f:即使文件系统处于clean状态,也要强制进行检测;

通用工具: fsck -t xxx(fsck.xxx)

xxx 为文件系统,如:

fsck -t ext4 = fsck.ext4

and repair a Linux file system
1
2
3
-t fstype:指明文件系统类型;
-a:无须交互而自动修复所有错误;
-r:交互式修复;

查看文件系统属性

dumpe2fs命令 :显示 ext 系列文件系统的属性信息。

dumpe2fs [-h] device

blkid 命令:显示设备属性信息。

device
1
2
blkid  -L LABEL:根据LABEL定位设备
blkid -U UUID:根据UUID定位设备

mount 和 umount

简介

mount 即装配或挂载之意,一个新的分区,如果想要对其进行访问,必须要使其符合 FHS 规范,即将关联到由 / 开始的目录树中,此关联操作即为 挂载 ;此目录即为 挂载点

挂载点( mount_point ),用于作为另一个文件系统的访问入口,有如下3个特性:

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

mount 命令

命令格式:

mount [-nrw] [-t vfstype] [-o options] device dir

命令选项:

manhelp 里面都有详细说明,这里只选取一些常用的进行解释。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-a:可自动挂载定义在/etc/fstab文件中的所支持自动挂载的设备;
-r:readonly,只读挂载;
-w:read and write, 读写挂载;
-n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性;
-t vfstype:指明要挂载的设备上的文件系统的类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型;
-L LABEL:挂载时以卷标的方式指明设备;
-U UUID:挂载时以UUID的方式指明设备;
-o options:挂载选项
sync/async:同步/异步操作;
atime/noatime:文件或目录在被访问时是否更新其访问时间戳;
diratime/nodiratime:目录在被访问时是否更新其访问时间戳;
remount:重新挂载;
acl:支持使用facl功能;
ro:只读
rw:读写
dev/nodev:此设备上是否允许创建设备文件;
exec/noexec:是否允许运行此设备上的程序文件;
auto/noauto:
user/nouser:是否允许普通用户挂载此文件系统;
suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;
defaults:Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.

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

mount --bind 源目录 目标目录

查看当前系统所有已挂载的设备

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

常用挂载

一般来说如果没有特殊要求,可以使用最简方式快速挂载:

mount device dir

挂载光盘:

mount -r /dev/cdrom mount_point

挂载本地的回环设备(比如iso文件等镜像文件):

mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT

umount 命令:

命令格式:

umount device|dir

注意:正在被进程访问到的挂载点无法被卸载。

查看被哪个或哪些进程所战用:

1
2
lsof  MOUNT_POINT
fuser -v MOUNT_POINT

终止所有正在访问某挂载点的进程:

fuser -km MOUNT_POINT

自动挂载

/etc/fstab 文件中所配置的文件系统挂载,可以在开机时自动挂载。

每行定义一个要挂载的文件系统及相关属性:

/dev/vdb1 /var ext3 defaults 0 0

每个字段所代表的意思如下:

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
1. 要挂载的设备:
a. 设备文件;
b. LABEL;
c. UUID;
d. 伪文件系统:如sysfs, proc, tmpfs等;

2. 挂载点:
swap类型的设备的挂载点为swap;

3. 文件系统类型;

4. 挂载选项:
defaults:使用默认挂载选项;
如果要同时指明多个挂载选项,彼此间以逗号分隔:
defaults,acl,noatime,noexec

5. 转储频率:
0:从不备份;
1:每天备份;
2:每隔一天备份;

6. 自检次序:
0:不自检;
1:首先自检,通常只能是根文件系统可用1
2:次级自检;

交换分区的启用和禁用

相当于将 swap格式 的分区挂载到 swap 进行使用。

创建交换分区的命令: mkswap

启用: swapon

[OPTION] [DEVICE]
1
2

-a:定义在/etc/fstab文件中的所有swap设备;

禁用: swapoff

swapoff DEVICE