修改磁盘文件系统参数


某些时刻,你可能会希望修改一下目前文件系统的一些相关信息,举例来说,你可能要修改 Label name , 或者是 journal 的参数,或者是其他磁盘/文件系统运作时的相关参数 (例如 DMA 启动与 否~)。 这个时候,就得需要底下这些相关的指令功能啰~

mknod

回到顶部

还记得我们说过,在 Linux 底下所有的装置都以文件来代表吧!但是那个文件如何代表该装置呢? 很简单!就是透过文件的 major 与 minor 数值来替代的~所以,那个 major 与 minor 数值是有特 殊意义的,不是随意设定的喔!我们在 lsblk 指令的用法里面也谈过这两个数值呢!举例来说,在鸟 哥的这个测试机当中, 那个用到的磁盘 /dev/vda 的相关装置代码如下:

              [root@initroot ~]# ll /dev/vda*
              brw-rw----. 1 root disk 252, 0 Jun 24 02:30 /dev/vda
              brw-rw----. 1 root disk 252, 1 Jun 24 02:30 /dev/vda1
              brw-rw----. 1 root disk 252, 2 Jun 15 23:43 /dev/vda2
              brw-rw----. 1 root disk 252, 3 Jun 15 23:43 /dev/vda3
              brw-rw----. 1 root disk 252, 4 Jun 24 20:00 /dev/vda4
              brw-rw----. 1 root disk 252, 5 Jun 24 21:15 /dev/vda5
              
上表当中 252 为主要装置代码 (Major) 而 0~5 则为次要装置代码 (Minor)。 我们的 Linux 核心认 识的装置数据就是透过这两个数值来决定的!举例来说,常见的磁盘文件名 /dev/sda 与 /dev/loop0 装置代码如下所示:
磁盘文件名 Major Minor
/dev/sda 8 0-15
/dev/sdb 8 16-31
/dev/loop0 7 0/dev/loop1
7
1
如果你想要知道更多核心支持的硬件装置代码 (major, minor) 请参考核心官网的连结(注 8)。 基本上, Linux 核心 2.6 版以后,硬件文件名已经都可以被系统自动的实时产生了,我们根本不需要手动建 立装置文件。 不过某些情况底下我们可能还是得要手动处理装置文件的,例如在某些服务被关到特 定目录下时(chroot), 就需要这样做了。此时这个 mknod 就得要知道如何操作才行!
              [root@initroot ~]# mknod 装置文件名 [bcp] [Major] [Minor]   
              选项与参数:
              装置种类:
              b :设定装置名称成为一个周边储存设备文件,例如磁盘等;
              c :设定装置名称成为一个周边输入设备文件,例如鼠标/键盘等;
              p :设定装置名称成为一个 FIFO 文件;
              Major :主要装置代码;
              Minor :次要装置代码;
            
范例:由上述的介绍我们知道 /dev/vda10 装置代码 252, 10,请建立并查阅此装置
              [root@initroot ~]# mknod /dev/vda10 b 252 10
              [root@initroot ~]# ll /dev/vda10
              brw-r--r--. 1 root root 252, 10 Jun 24 23:40 /dev/vda10
              
# 上面那个 252 与 10 是有意义的,不要随意设定啊! 范例:建立一个 FIFO 文件,档名为 /tmp/testpipe
              [root@initroot ~]# mknod /tmp/testpipe p
              [root@initroot ~]# ll /tmp/testpipe
              prw-r--r--. 1 root root 0 Jun 24 23:44 /tmp/testpipe
              
# 注意啊!这个文件可不是一般文件,不可以随便就放在这里! # 测试完毕之后请删除这个文件吧!看一下这个文件的类型!是 p 喔!^_^
              [root@initroot ~]# rm /dev/vda10 /tmp/testpipe
              rm: remove block special file '/dev/vda10' ? y
              rm: remove fifo '/tmp/testpipe' ? y
              

xfs_admin 修改 XFS 文件系统的 UUID 与 Label name

回到顶部

如果你当初格式化的时候忘记加上标头名称,后来想要再次加入时,不需要重复格式化!直接使用这 个 xfs_admin 即可。 这个指令直接拿来处理 LABEL name 以及 UUID 即可啰!

              [root@initroot ~]# xfs_admin [-lu] [-L label] [-U uuid] 装置文件名
              选项与参数:
              -l :列出这个装置的 label name
              -u :列出这个装置的 UUID
              -L :设定这个装置的 Label name-U
              :设定这个装置的 UUID 喔!
            
范例:设定 /dev/vda4 的 label name 为 vbird_xfs,并测试挂载
              [root@initroot ~]# xfs_admin -L vbird_xfs /dev/vda4
              writing all SBs
              new label = "vbird_xfs"
              # 产生新的 LABEL 名称啰!
              [root@initroot ~]# xfs_admin -l /dev/vda4
              label = "vbird_xfs"
              [root@initroot ~]# mount LABEL=vbird_xfs /data/xfs/
              
范例:利用 uuidgen 产生新 UUID 来设定 /dev/vda4,并测试挂载
              [root@initroot ~]# umount /dev/vda4
              # 使用前,请先卸除!
              [root@initroot ~]# uuidgen
              e0fa7252-b374-4a06-987a-3cb14f415488
              # 很有趣的指令!可以产生新的 UUID 喔!
              [root@initroot ~]# xfs_admin -u /dev/vda4
              UUID = e0a6af55-26e7-4cb7-a515-826a8bd29e90
              [root@initroot ~]# xfs_admin -U e0fa7252-b374-4a06-987a-3cb14f415488 /dev/vda4
              Clearing log and setting UUID
              writing all SBs
              new UUID = e0fa7252-b374-4a06-987a-3cb14f415488
              [root@initroot ~]# mount UUID=e0fa7252-b374-4a06-987a-3cb14f415488 /data/xfs

              
不知道你会不会有这样的疑问:『啊,既然 mount 后面使用装置文件名 (/dev/vda4) 也可以挂 载成功,那你为什么要用很讨厌的很长一串的 UUID 来作为你的挂载时写入的装置名称啊?』问的 好!原因是这样的:『因为你没有办法指定这个磁盘在所有的 Linux 系统中,文件名一定都会是 /dev/vda !』 举例来说,我们刚刚使用的随身碟在这个测试系统当中查询到的档名是 /dev/sda,但是当这个随 身碟放到其他的已经有 /dev/sda 文件名的 Linux 系统下,它的文件名就会被指定成为 /dev/sdb 或 /dev/sdc 等等。反正,不会是 /dev/sda 了!那我怎么用同一个指令去挂载这只随身碟呢? 当然有问 题吧!但是 UUID 可是很难重复的!看看上面 uuidgen 产生的结果你就知道了!所以你可以确定该 名称不会被重复! 这对系统管理上可是相当有帮助的!它也比 LABEL name 要更精准的多呢! ^_^

tune2fs 修改 ext4 的 label name 与 UUID

回到顶部

              [root@initroot ~]# tune2fs [-l] [-L Label] [-U uuid] 装置文件名
              
选项与参数:
-l :类似 dumpe2fs -h 的功能~将 superblock 内的数据读出来~ -L :修改 LABEL name -U :修改 UUID 啰!
范例:列出 /dev/vda5 的 label name 之后,将它改成 vbird_ext4
              [root@initroot ~]# dumpe2fs -h /dev/vda5 | grep name
              dumpe2fs 1.42.9 (28-Dec-2013)Filesystem volume name:
              none>
              # 果然是没有设定的!
              [root@initroot ~]# tune2fs -L vbird_ext4 /dev/vda5
              [root@initroot ~]# dumpe2fs -h /dev/vda5 | grep name
              Filesystem volume name:
              vbird_ext4
              [root@initroot ~]# mount LABEL=vbird_ext4 /data/ext4
              
这个指令的功能其实很广泛啦~上面仅列出很简单的一些参数而已,更多的用法请自行参考 man tune2fs 。

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读