第7章 Linux磁盘与文件系统管理
一、要点总结
7.1 认识Linux文件系统
-
磁盘分区需要被格式化成文件系统才能被操作系统使用。
-
基本上Linux的传统文件系统为ext2,是一种索引式文件系统。它的主要构成有:
- superblock:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
- inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
- block:实际记录文件的内容,若文件太大时,会占用多个 block 。
-
需要碎片整理的原因是文件写入的block太过于离散了,此时文件读取的性能将会变的很差。 这个时候可以通过碎片整理将同一个文件所属的blocks集合在一起。FAT这种非索引式文件系统就需要时常碎片整理一下。
-
inode和block在格式化的时候就规划好了,除非重新格式化或者利用resize2fs等命令修改大小,否则都无法变动了。
-
ext2文件系统格式化好后分为启动扇区(boot sector)和多个区块群组(block group),每个区块群组内有独立的超级块、文件系统描述、inode对照表、block对照表、inode table和data block六个部分。
- data block是用来放置文件内容数据地方。
- 在ext2文件系统中所支持的block大小有1K, 2K及4K三种而已。block大小会影响最大单一文件大小和最大文件系统容量。
- 每个区块最多只能放一个文件的数据,如果文件小于区块,剩下的容量不能再被使用,就造成浪费了。
- inode 记录文件的属性/权限等数据,也是一个文件使用的区块的索引。系统读取文件是先找到inode,并分析上面的权限是否和用户符合,若符合就找出inode上记录的区块的数据。
- 每个文件都仅会占用一个 inode 而已; 因此文件系统能够创建的文件数量与 inode 的数量有关。
- 每个 inode 大小均固定为128B,xfs和ext4可以到256B。由于block被inode记录,所以文件的最大大小和inode大小有关。为了增大能记录的最大文件大小,inode记录区块号码区域被分为12个直接、一个间接、一个双间接、一个三间接记录区。所谓间接就是再拿一个区块当作记录区块号码的记录区。
- superblock(超级块)是记录整个文件系统信息的地方,包括区块和inode的大小、总量和余量、文件系统的挂载状态、挂载时间等信息。
- Filesystem Description(文件系统描述说明)描述每个区块群组的开始与结束的block号码,以及说明区块群组内每个区段(superblock, bitmap, inodemap, data block)分别位于那些区块。
- 区块对照表(block bitmap)记录哪些区块是空的,便于系统快速新建文件。
- inode对照表(inode bitmap)记录哪些inode是空的,便于系统快速新建文件。
- data block是用来放置文件内容数据地方。
-
查询ext系列系统superblock信息的命令
dumpe2fs
1
2
3
4dumpe2fs [-bh] 设备文件名
# 选项与参数:
# -b :列出保留为坏轨的部分(一般用不到)
# -h :仅列出superblock的数据,不会列出其他的区块群组的内容。 -
和目录的关系
- 新建目录的时候,文件系统会分配一个inode与至少一个区块给该目录。inode记录目录的权限和属性,区块记录目录下文件的文件名和inode号码。
- 目录树读取时,会一层一层依次经过从根目录到具体文件的inode和block。
- 将文件系统和目录树结合的操作称为挂载。挂载点一定是目录,该目录是进入文件系统的入口。
-
日志式文件系统 (journal) 会多出一块记录区,随时记载文件系统的主要活动,可加快系统在发生数据不一致后的复原时间。
-
Linux 文件系统为增加读写性能,使用了异步处理的思路:让内存作为大量的磁盘高速缓存,系统不定时把内存里标记为dirty的数据写回磁盘,也可通过
sync
命令手动写回。 -
整个 Linux 的系统都是通过一个名为Linux VFS(Virtual Filesystem Switch)的核心功能去读取各种各样的文件系统。,相当于一层抽象。
-
XFS文件系统主要规划为三个部份,一个数据区 (data section)、一个文件系统活动登录区 (log section)以及一个实时运行区 (realtime section)。可以使用
xfs_info
去观察超级区块内容。
7.2 文件系统的简单操作
-
观察文件系统的整体磁盘使用量
df
1
2
3
4
5
6
7
8
9df [-ahikHTm] [目录或文件名]
# 选项与参数:
# -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
# -k :以 KBytes 的容量显示各文件系统;
# -m :以 MBytes 的容量显示各文件系统;
# -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
# -H :以 M=1000K 取代 M=1024K 的进位方式;
# -T :连同该 partition 的 filesystem 名称 (例如 xfs) 也列出;
# -i :不用磁盘容量,而以 inode 的数量来显示- 在Linux下面如果
df
没有加任何选项,那么默认会将系统内所有的(不含特殊内存内的文件系统与 swap)都以 1 KBytes 的容量来列出来。 - 在
df
后面加上目录或者是文件时,df
会自动的分析该目录或文件所在的分区,并将该分区的容量显示出来。 - 由于
df
主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在superblock内的信息, 所以这个指令显示结果的速度非常的快速。
- 在Linux下面如果
-
查看文件或目录的磁盘使用量
du
1
2
3
4
5
6
7
8du [-ahskm] 文件或目录名称
# 选项与参数:
# -a :列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已。
# -h :以人们较易读的容量格式 (G/M) 显示;
# -s :列出总量而已,而不列出每个各别的目录占用容量;
# -S :不包括子目录下的总计,与 -s 有点差别。
# -k :以 KBytes 列出容量显示;
# -m :以 MBytes 列出容量显示;- 直接输入
du
没有加任何选项时,则du
会分析【目前所在目录】的文件与目录所占用的磁盘空间。但是实际显示时,仅会显示目录容量(不含文件),因此.
目录有很多文件没有被列出来,所以全部的目录相加不会等于.
的容量。此外,输出的数值数据为【1K】大小的容量单位。 - 与
df
不一样的是,du
这个指令其实会直接到文件系统内去搜寻所有的文件数据, 所以会执行一小段时间。
- 直接输入
-
建立链接
ln
1
2
3
4ln [-sf] 来源文件 目标文件
# 选项与参数:
# -s :如果不加任何参数就进行链接,那就是hard link,至于 -s 就是symbolic link
# -f :如果【目标文件】存在时,就主动的将目标文件直接移除后再创建-
Linux下的链接文件主要有两种,硬链接和符号链接。
-
硬链接(Hard Link,硬式链接或实际链接)
- 文件名只和目录有关,而文件内容则和inode有关。硬链接只是在某个目录下新增一笔文件名链接到某inode号码的关连记录而已,因此也大概率不会改变系统使用的inode和block数量。
ll -i 文件名
显示的第二个字段就是有多少个文件名链接到相同的inode。- 当我们新建一个目录时候,因为除了这个目录还会新建
.
和..
,所以这个目录的链接数是2,而上层目录的链接数会加一。
- 当我们新建一个目录时候,因为除了这个目录还会新建
- 硬链接最大的好处是安全:如果将任何一个文件名删除,其实inode和数据区块都还是存在的。
- 但是硬链接还是有限制的:
- 不能跨文件系统
- 不能链接目录(因为如果硬链接到目录,链接的数据需要同被链接目录下所有数据都建立链接,以后新建目录也要额外新建链接,导致了相当大的系统复杂度)
-
符号链接(Symbolic Link,快捷方式)
-
符号链接就是建立一个独立的文件,有独立的inode,但是block指向它链接的那个文件的文件名。由于符号链接创建了一个独立的新文件,所以会占用inode和block。
-
使用
ll -i 文件名
查看后会发现链接文件会写上目标文件的文件名,例如:1
2
3ll -i /etc/crontab /root/crontab2
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 -> /etc/crontab
-
-
7.3 磁盘分区管理
-
观察磁盘分区状态
-
lsblk
列出系统上所有磁盘列表lsblk
可以看成【list block device】的缩写。- 可以用来查看挂载点、分区容量等信息。
1
2
3
4
5
6
7
8lsblk [-dfimpt] [device]
# 选项与参数:
# -d :仅列出磁盘本身,并不会列出该磁盘的分区数据
# -f :同时列出该磁盘内的文件系统名称
# -i :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用)
# -m :同时输出该设备在 /dev 下面的权限数据 (rwx 的数据)
# -p :列出该设备的完整文件名!而不是仅列出最后的名字而已。
# -t :列出该磁盘设备的详细数据,包括磁盘伫列机制、预读写的数据量大小等 -
blkid
列出设备的UUID等参数- UUID 是全局唯一标识符(universally unique identifier),Linux 会将系统内所有的设备都给予一个独一无二的标识符,这个标识符就可以拿来作为挂载或是使用这个设备或文件系统。
1
blkid # 每一行打印一个文件系统,主要列出设备名称、UUID以及文件系统的类型(TYPE)
-
parted
列出磁盘的分区表类型与分区信息- 这个命令可以用来查看分区表类型,便于后面选择对应的分区管理工具。
1
parted device_name print
-
-
磁盘分区管理
-
GPT分区使用
gdisk
1
gdisk 设备名称
gdisk
只有root可以执行。- 这个程序是完全不需要背命令的,只要按下【?】就能看到所有的操作。
- 值得注意的是【q】和【w】操作,只要离开时按下【q】那么所有的操作都不会生效。反之按下【w】就是写入、操作生效的意思。
- 更改分区后,因为Linux还在使用这块磁盘,担心系统出问题,所以用
cat /proc/partitions
观察分区表可以发现并没有更新。这时有两种方法更新,一是重启,二是通过partprobe
命令强制更新Linux内核的分区表信息。 - 另外,万分注意:不要去处理一个正在使用中的分区!一定要先卸载分区再对分区进行操作,否则虽然磁盘还是会写入正确的分区信息,但是核心会无法更新分区表的信息。另外,文件系统与 Linux 系统的稳定性,恐怕也会变得怪怪的。
-
MBR分区使用
fdisk
fdisk
跟gdisk
使用的方式几乎一样。- 轻微的不同:
fdisk
使用【m】显示提示,而不是【?】。fdisk
有时使用柱面(cylinder)作为分区的最小单位。
-
parted
适用于两种分区表1
2
3
4
5
6parted [设备] [指令 [参数]]
# 选项与参数:
# 命令功能:
# 新增分区:mkpart [primary|logical|extended] [ext4|vfat|xfs] 开始 结束
# 显示分区:print
# 删除分区:rm [partition]- 如果你想要将原本的 MBR 改成 GPT 分区表,或原本的 GPT 分区表改成 MBR 分区表,也能使用
parted
。
- 如果你想要将原本的 MBR 改成 GPT 分区表,或原本的 GPT 分区表改成 MBR 分区表,也能使用
-
7.4 磁盘分区的格式化(创建文件系统)
-
使用
mkfs
系列命令格式化硬盘(创建文件系统)-
格式化的指令非常的简单,那就是使用
mkfs
(make filesystem)这个命令。输入mkfs [Tab] [Tab]
找到对应想格式化的文件系统类型即可。 -
XFS文件系统的
mkfs.xfs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] \
[-r parms] 设备名称
# 选项与参数:
# 关于单位:下面只要谈到“数值”时,没有加单位则为 Bytes 值,可以用 k,m,g,t,p (小写)等来解释
# 比较特殊的是 s 这个单位,它指的是 sector 的“个数”喔!
# -b :后面接的是 block 容量,可由 512 到 64k,不过最大容量限制为 Linux 的 4k 喔!
# -d :后面接的是重要的 data section 的相关参数值,主要的值有:
# agcount=数值 :设置需要几个储存群组的意思(AG),通常与 CPU 有关
# agsize=数值 :每个 AG 设置为多少容量的意思,通常 agcount/agsize 只选一个设置即可
# file :指的是“格式化的设备是个文件而不是个设备”的意思!(例如虚拟磁盘)
# size=数值 :data section 的容量,亦即你可以不将全部的设备容量用完的意思
# su=数值 :当有 RAID 时,那个 stripe 数值的意思,与下面的 sw 搭配使用
# sw=数值 :当有 RAID 时,用于储存数据的磁盘数量(须扣除备份碟与备用碟)
# sunit=数值 :与 su 相当,不过单位使用的是“几个 sector(512Bytes大小)”的意思
# swidth=数值 :就是 su*sw 的数值,但是以“几个 sector(512Bytes大小)”来设置
# -f :如果设备内已经有文件系统,则需要使用这个 -f 来强制格式化才行!
# -i :与 inode 有较相关的设置,主要的设置值有:
# size=数值 :最小是 256Bytes 最大是 2k,一般保留 256 就足够使用了!
# internal=[0|1]:log 设备是否为内置?默认为 1 内置,如果要用外部设备,使用下面设置
# logdev=device :log 设备为后面接的那个设备上头的意思,需设置 internal=0 才可!
# size=数值 :指定这块登录区的容量,通常最小得要有 512 个 block,大约 2M 以上才行!
# -L :后面接这个文件系统的标头名称 Label name 的意思!
# -r :指定 realtime section 的相关设置值,常见的有:
# extsize=数值 :就是那个重要的 extent 数值,一般不须设置,但有 RAID 时,
# 最好设置与 swidth 的数值相同较佳!最小为 4K 最大为 1G 。- 因为 xfs 可以使用多个数据流来读写系统以增加速度,因此那个 agcount 可以跟 CPU 的核心数来做搭配。
-
ext4文件系统的
mkfs.ext4
1
2
3
4mkfs.ext4 [-b size] [-L label] 设备名称
# 选项与参数:
# -b :设置 block 的大小,有 1K, 2K, 4K 的容量,
# -L :后面接这个设备的标头名称。
-
-
内存交换分区(swap)的创建
现在想像一个情况,你已经将系统创建起来了,此时却才发现你没有创建内存交换分区,那该如何是好?你可以使用如下方式来建立你的内存分区
- 使用物理分区创建内存交换分区
- 分区:先使用
gdisk
在你的磁盘中分区出一个分区给系统作为内存交换分区。 - 格式化:利用建立内存交换分区格式的
mkswap 设备文件名
就能够格式化该分区称为内存交换分区格式 - 使用:最后将该swap设备启动,方法为
swapon 设备文件名
。 - 观察:最终通过
free
与swapon -s
这个命令来观察以下内存的使用量。
- 分区:先使用
- 使用文件创建内存交换文件
- 使用
dd
这个命令来新增一个空文件 - 用
mkswap
将这个文件格式化为内存交换文件的文件格式 - 使用
swapon
来将这个内存交换文件启动 - 用
swapoff
关掉内存交换文件,并在/etc/fstab设置自动启用
- 使用
- 使用物理分区创建内存交换分区
7.5 文件系统检验
文件系统运行时会有磁盘与内存数据非同步的状况发生,因此莫名其妙的死机非常可能导致文件系统的错乱。不同的文件系统救援的指令不太一样,我们主要针对 xfs 及 ext4 这两个主流文件系统来说明。
-
注意:通常只有身为 root 且你的文件系统有问题的时候才使用这个命令,否则在正常状况下使用此命令, 可能会造成对系统的危害。
-
由于在扫描磁盘的时候,可能会造成部分文件系统的改变,所以一定要先卸载文件系统再检查硬盘
-
xfs_repair
处理XFS文件系统1
2
3
4
5xfs_repair [-fnd] 设备名称
# 选项与参数:
# -f :后面的设备其实是个文件而不是实体设备
# -n :单纯检查并不修改文件系统的任何数据(检查而已)
# -d :通常用在单人维护模式下面,针对根目录(/) 进行检查与修复的动作!很危险!不要随便使用。- 因为修复文件系统是个很庞大的任务。因此,修复时该文件系统不能被挂载。
- 但是根目录是无法被卸载的。这时就需要进入单人维护或恢复模式,然后通过 -d 这个选项来处理。 加入 -d 这个选项后,系统会强制检验该设备,检验完毕后就会自动重新启动。
-
fsck.ext4
处理ext4
文件系统1
2
3
4
5
6
7
8
9fsck.ext4 [-pf] [-b superblock] 设备名称
# 选项与参数:
# -p :当文件系统在修复时,若有需要回复 y 的动作时,自动回复 y 来继续进行修复动作。
# -f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入
# 细部检查的,如果您想要强制 fsck 进入细部检查,就得加上 -f 旗标啰!
# -D :针对文件系统下的目录进行最优化配置。
# -b :后面接 superblock 的位置!一般来说这个选项用不到。但是如果你的 superblock 因故损毁时,
# 通过这个参数即可利用文件系统内备份的 superblock 来尝试救援。一般来说,superblock 备份在:
# 1K block 放在 8193, 2K block 放在 16384, 4K block 放在 32768
7.6 文件系统挂载和卸载、设置启动挂载
-
挂载的原则:
- 单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
- 单一目录不应该重复挂载多个文件系统;
- 要作为挂载点的目录,理论上应该都是空目录才是。
- 如果你要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时的消失。注意并不是被覆盖掉, 而是暂时的隐藏了起来。
-
使用
mount
命令挂载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
26mount -a
mount [-l]
mount [-t 文件系统] LABEL='' 挂载点
mount [-t 文件系统] UUID='' 挂载点 # 鸟哥近期建议用这种方式喔!
mount [-t 文件系统] 设备文件名 挂载点
# 选项与参数:
# -a :依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
# -l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列Label名称。
# -t :可以加上文件系统种类来指定欲挂载的类型。常见的 Linux 支持类型有:xfs, ext3, ext4,
# reiserfs, vfat, iso9660(光盘格式), nfs, cifs, smbfs (后三种为网络文件系统类型)
# -n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运行。
# 但在某些情况下(例如单人维护模式)为了避免问题会刻意不写入。此时就得要使用 -n 选项。
# -o :后面可以接一些挂载时额外加上的参数!比方说帐号、密码、读写权限等:
# async, sync: 此文件系统是否使用同步写入 (sync) 或非同步 (async) 的
# 内存机制,请参考文件系统运行方式。默认为 async。
# atime,noatime: 是否修订文件的读取时间(atime)。为了性能,某些时刻可使用 noatime
# ro, rw: 挂载文件系统成为只读(ro) 或可读写(rw)
# auto, noauto: 允许此 filesystem 被以 mount -a 自动挂载(auto)
# dev, nodev: 是否允许此 filesystem 上,可创建设备文件? dev 为可允许
# suid, nosuid: 是否允许此 filesystem 含有 suid/sgid 的文件格式?
# exec, noexec: 是否允许此 filesystem 上拥有可执行 binary 文件?
# user, nouser: 是否允许此 filesystem 让任何使用者执行 mount ?一般来说,
# mount 仅有 root 可以进行,但下达 user 参数,则可让
# 一般 user 也能够对此 partition 进行 mount 。
# defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async
# remount: 重新挂载,这在系统出错,或重新更新参数时,很有用!-
基本上,CentOS 7 已经太聪明了,因此你不需要加上 -t 这个选项,系统会自动的分析最恰当的文件系统来尝试挂载你需要的设备。由于文件系统几乎都有 superblock ,我们的 Linux 可以通过分析 superblock 搭配 Linux 自己的驱动程序去测试挂载, 如果成功的套和了,就立刻自动的使用该类型的文件系统挂载起来。一般是根据下面两个文件的信息进行测试:
- /etc/filesystems:系统指定的测试挂载文件系统类型的优先级;
- /proc/filesystems:Linux系统已经加载的文件系统类型。、
-
光驱一旦挂载就无法退出光盘了,除非你将它卸载才能退出。CD或DVD光盘挂载后使用
df
看占用率是100%的,是因为只读无法写入了。 -
根目录根本就不能够被卸载。问题是,如果你的挂载参数要改变, 或者是根目录出现【只读】状态时,如何重新挂载呢?最可能的处理方式就是重新开机 (reboot)! 不过你也可以这样做:
1
mount -o remount,rw,auto /
-
我们也可以利用 mount 来将某个目录挂载到另外一个目录去。虽然下面的方法也可以使用 符号链接来代替,不过在某些不支持符号链接的程序运行中,还是得要通过这样的方法才行。通过
mount --bind
可以把两个目录连接到同一个inode去1
mount --bind /var /data/var
-
-
使用
umount
将设备文件卸载1
2
3
4
5umount [-fn] 设备文件名或挂载点
# 选项与参数:
# -f :强制卸载!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
# -l :立刻卸载文件系统,比 -f 还强;
# -n :不更新 /etc/mtab 情况下卸载。- 基本上,卸载后面接设备或挂载点都可以。不过最后一个 centos-root 由于有其他挂载,因此该项目一定要使用挂载点来卸载才行。
-
/etc/fstab
设置开机自动挂载1
2
3vim /etc/fstab
# [设备/UUID等] [挂载点] [文件系统] [文件系统参数] [dump] [fsck]
mount -a-
文件系统参数
参数 内容意义 async/sync 非同步/同步 设置磁盘是否以非同步方式运行!默认为 async(性能较佳) auto/noauto 自动/非自动 当下达 mount -a 时,此文件系统是否会被主动测试挂载。默认为 auto。 rw/ro 可读写/只读 让该分区以可读写或者是只读的型态挂载上来,如果你想要分享的数据是不给使用者随意变更的, 这里也能够设置为只读。则不论在此文件系统的文件是否设置 w 权限,都无法写入喔! exec/noexec 可执行/不可执行 限制在此文件系统内是否可以进行“执行”的工作?如果是纯粹用来储存数据的目录, 那么可以设置为 noexec 会比较安全。不过,这个参数也不能随便使用,因为你不知道该目录下是否默认会有可执行文件。举例来说,如果你将 noexec 设置在 /var ,当某些软件将一些可执行文件放置于 /var 下时,那就会产生很大的问题喔! 因此,建议这个 noexec 最多仅设置于你自订或分享的一般数据目录。 user/nouser 允许/不允许使用者挂载 是否允许使用者使用 mount指令来挂载呢?一般而言,我们当然不希望一般身份的 user 能使用 mount 啰,因为太不安全了,因此这里应该要设置为 nouser 啰! suid/nosuid 具有/不具有 suid 权限 该文件系统是否允许 SUID 的存在?如果不是可执行文件放置目录,也可以设置为 nosuid 来取消这个功能! defaults 同时具有 rw, suid, dev, exec, auto, nouser, async 等参数。 基本上,默认情况使用 defaults 设置即可! -
dump:能否被 dump 备份指令作用。
-
fsck:是否以 fsck 检验扇区。
-
/etc/fstab 是开机时的配置文件,不过,实际 filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts 这两个文件当中的。
-
-
特殊设备 loop 挂载 (镜像文件不烧录就挂载使用)
-
挂载CD/DVD镜像文件
下载了CD/DVD的镜像文件后,不一定需要烧录成为光盘才能够使用该文件里面的数据。我们可以通过 loop 设备来挂载。
1
mount -o loop /tmp/CentOS-7.0-1406-x86_64-DVD.iso /data/centos_dvd
-
创建大文件以制作 loop 设备文件
既然能够挂载 DVD的镜像文件,那么我能不能制作出一个大文件,然后将这个文件格式化后挂载呢? 当然可以!这个方法可以在不改变原有分区的情况下,额外创造出一块感觉上的分区!
1
2
3
4dd if=/dev/zero of=/srv/loopdev bs=1M count=512 # 创建一个512MB的空文件
mkfs.xfs -f /srv/loopdev # 格式化创造文件系统
mount -o loop /srv/loopdev /mnt # 挂载
df /mnt # 查看文件系统
-
7.7 修改磁盘、文件系统的参数
-
Linux下所有设备都以文件来表示,但是那个文件如何代表该设备?很简单,就是通过文件的major和minor数值来替代。
-
mknod
1
2
3
4
5
6
7
8mknod 设备文件名 [bcp] [Major] [Minor]
# 选项与参数:
# 设备种类:
# b :设置设备名称成为一个周边储存设备文件,例如磁盘等;
# c :设置设备名称成为一个周边输入设备文件,例如鼠标/键盘等;
# p :设置设备名称成为一个 FIFO 文件;
# Major :主要设备代码;
# Minor :次要设备代码; -
xfs_admin
修改 XFS 文件系统的 UUID 与 Label name1
2
3
4
5
6xfs_admin [-lu] [-L label] [-U uuid] 设备文件名
# 选项与参数:
# -l :列出这个设备的 label name
# -u :列出这个设备的 UUID
# -L :设置这个设备的 Label name
# -U :设置这个设备的 UUID -
tune2fs
修改 ext4 的 label name 与 UUID1
2
3
4
5tune2fs [-l] [-L Label] [-U uuid] 设备文件名
# 选项与参数:
# -l :类似 dumpe2fs -h 的功能~将 superblock 内的数据读出来;
# -L :修改 LABEL name;
# -U :修改 UUID 。
二、习题解答(非官方,仅为个人练习记录)
-
我们常常说,启动的时候,【发现磁盘有问题】,请问,这个问题的产生是【文件系统的损毁】,还是【磁盘的损毁】?
都可能。
-
当我有两个文件,分别是 file1 与 file2 ,这两个文件互为硬链接的文件,请问, 若我将 file1 删除,然后再以类似 vi 的方式重新创建一个名为 file1 的文件, 则 file2 的内容是否会被更动?
不会。新建的文件有自己的inode和block,文件名只是目录block里的一条记录罢了。