某些时刻,你可能会希望修改一下目前文件系统的一些相关信息,举例来说,你可能要修改 Label name , 或者是 journal 的参数,或者是其他硬盘运行时的相关参数 (例如 DMA 启动与否~)。 这个时候,就得需要底下这些相关的命令功能啰~
mknod
还记得我们说过,在 Linux 底下所有的装置都以文件来代表吧!但是那个文件如何代表该装置呢? 很简单!就是透过文件的 major 与 minor 数值来替代的~所以,那个 major 与 minor 数值是有特殊意义的,不是随意配置的喔!举例来说,在鸟哥的这个测试机当中, 那个用到的磁盘 /dev/hdc 的相关装置代码如下:
[[email protected] ~]# ll /dev/hdc* brw-r----- 1 root disk 22, 0 Oct 24 15:55 /dev/hdc brw-r----- 1 root disk 22, 1 Oct 20 08:47 /dev/hdc1 brw-r----- 1 root disk 22, 2 Oct 20 08:47 /dev/hdc2 brw-r----- 1 root disk 22, 3 Oct 20 08:47 /dev/hdc3 brw-r----- 1 root disk 22, 4 Oct 24 16:02 /dev/hdc4 brw-r----- 1 root disk 22, 5 Oct 20 16:46 /dev/hdc5 brw-r----- 1 root disk 22, 6 Oct 25 01:33 /dev/hdc6
上表当中 22 为主要装置代码 (Major) 而 0~6 则为次要装置代码 (Minor)。 我们的 Linux 核心认识的装置数据就是透过这两个数值来决定的!举例来说,常见的硬盘文件名 /dev/hda 与 /dev/sda 装置代码如下所示:
磁盘文件名 | Major | Minor |
/dev/hda | 3 | 0~63 |
/dev/hdb | 3 | 64~127 |
/dev/sda | 8 | 0-15 |
/dev/sdb | 8 | 16-31 |
如果你想要知道更多核心支持的硬件装置代码 (major, minor) 请参考官网的连结:
基本上,Linux 核心 2.6 版以后,硬件文件名已经都可以被系统自动的实时产生了,我们根本不需要手动创建装置文件。 不过某些情况底下我们可能还是得要手动处理装置文件的,例如在某些服务被关到特定目录下时(chroot), 就需要这样做了。此时这个 mknod 就得要知道如何操作才行!
使用参数
[[email protected] ~]# mknod 装置文件名 [bcp] [Major] [Minor] 选项与参数: 装置种类: b :配置装置名称成为一个周边储存设备文件,例如硬盘等; c :配置装置名称成为一个周边输入设备文件,例如鼠标/键盘等; p :配置装置名称成为一个 FIFO 文件; Major :主要装置代码; Minor :次要装置代码;
由上述的介绍我们知道 /dev/hdc10 装置代码 22, 10,请创建并查阅此装置
[[email protected] ~]# mknod /dev/hdc10 b 22 10 [[email protected] ~]# ll /dev/hdc10 brw-r--r-- 1 root root 22, 10 Oct 26 23:57 /dev/hdc10 # 上面那个 22 与 10 是有意义的,不要随意配置啊!
创建一个 FIFO 文件,档名为 /tmp/testpipe
[[email protected] ~]# mknod /tmp/testpipe p [[email protected] ~]# ll /tmp/testpipe prw-r--r-- 1 root root 0 Oct 27 00:00 /tmp/testpipe # 注意啊!这个文件可不是一般文件,不可以随便就放在这里! # 测试完毕之后请删除这个文件吧!看一下这个文件的类型!是 p 喔!
e2label
我们在 mkfs 命令介绍时有谈到配置文件系统标头 (Label) 的方法。 那如果格式化完毕后想要修改标头呢?就用这个 e2label 来修改了。那什么是 Label 呢? 我们拿你曾用过的 Windows 系统来说明。当你打开『文件总管』时,C/D等槽不是都会有个名称吗? 那就是 label (如果没有配置名称,就会显示『本机磁盘驱动器』的字样)
这个东西除了有趣且可以让你知道磁盘的内容是啥玩意儿之外,也会被使用到一些配置文件案当中! 举例来说,刚刚我们聊到的磁盘的挂载时,不就有用到 Label name 来进行挂载吗? 目前 CentOS 的配置文件,也就是那个 /etc/fstab 文件的配置都默认使用 Label name 呢! 那这样做有什么好处与缺点呢?
- 优点:不论磁盘文件名怎么变,不论你将硬盘插在哪个 IDE / SATA 接口,由于系统是透过 Label ,所以,磁盘插在哪个接口将不会有影响;
- 缺点:如果插了两颗硬盘,刚好两颗硬盘的 Label 有重复的,那就惨了~ 因为系统可能会无法判断哪个磁盘分区槽才是正确的!
鸟哥一直是个比较『硬派』作风,所以我还是比较喜欢直接利用磁盘文件名来挂载啦! 不过,如果没有特殊需求的话,那么利用 Label 来挂载也成! 但是你就不可以随意修改 Label 的名称了!
使用参数
[[email protected] ~]# e2label 装置名称 新的Label名称
将 /dev/hdc6 的标头改成 my_test 并观察是否修改成功?
[[email protected] ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: vbird_logical <==原本的标头名称 .....底下省略..... [[email protected] ~]# e2label /dev/hdc6 "my_test" [[email protected] ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: my_test <==改过来啦! .....底下省略.....
tune2fs
[[email protected] ~]# tune2fs [-jlL] 装置代号 选项与参数: -l :类似 dumpe2fs -h 的功能~将 superblock 内的数据读出来~ -j :将 ext2 的 filesystem 转换为 ext3 的文件系统; -L :类似 e2label 的功能,可以修改 filesystem 的 Label 喔!
列出 /dev/hdc6 的 superblock 内容
[[email protected] ~]# tune2fs -l /dev/hdc6
这个命令的功能其实很广泛啦~上面鸟哥仅列出很简单的一些参数而已, 更多的用法请自行参考 man tune2fs 。比较有趣的是,如果你的某个 partition 原本是 ext2 的文件系统,如果想要将他升级成为 ext3 文件系统的话,利用 tune2fs 就可以很简单的转换过来啰~
hdparm
如果你的硬盘是 IDE 接口的,那么这个命令可以帮助你配置一些进阶参数!如果你是使用 SATA 接口的, 那么这个命令就没有多大用途了!另外,目前的 Linux 系统都已经稍微优化过,所以这个命令最多是用来测试效能啦! 而且建议你不要随便调整硬盘参数,文件系统容易出问题喔!除非你真的知道你调整的数据是啥!
[[email protected] ~]# hdparm [-icdmXTt] 装置名称 选项与参数: -i :将核心侦测到的硬盘参数显示出来! -c :配置 32-bit (32位)存取模式。这个 32 位存取模式指的是在硬盘在与 PCI 接口之间传输的模式,而硬盘本身是依旧以 16 位模式在跑的! 默认的情况下,这个配置值都会被打开,建议直接使用 c1 即可! -d :配置是否激活 dma 模式, -d1 为启动, -d0 为取消; -m :配置同步读取多个 sector 的模式。一般来说,配置此模式,可降低系统因为 读取磁盘而损耗的效能~不过, WD 的硬盘则不怎么建议配置此值~ 一般来说,配置为 16/32 是优化,不过,WD 硬盘建议值则是 4/8 。 这个值的最大值,可以利用 hdparm -i /dev/hda 输出的 MaxMultSect 来配置喔!一般如果不晓得,配置 16 是合理的! -X :配置 UtraDMA 的模式,一般来说, UDMA 的模式值加 64 即为配置值。 并且,硬盘与主板芯片必须要同步,所以,取最小的那个。一般来说: 33 MHz DMA mode 0~2 (X64~X66) 66 MHz DMA mode 3~4 (X67~X68) 100MHz DMA mode 5 (X69) 如果您的硬盘上面显示的是 UATA 100 以上的,那么配置 X69 也不错! -T :测试缓存区 cache 的存取效能 -t :测试硬盘的实际存取效能 (较正确!)
取得我硬盘的最大同步存取 sector 值与目前的 UDMA 模式
[[email protected] ~]# hdparm -i /dev/hdc Model=IC35L040AVER07-0, FwRev=ER4OA41A, SerialNo=SX0SXL98406 <==硬盘的厂牌型号 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=40 BuffType=DualPortCache, BuffSize=1916kB, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=80418240 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5 <==有 * 为目前的值 AdvancedPM=yes: disabled (255) WriteCache=enabled Drive conforms to: ATA/ATAPI-5 T13 1321D revision 1: ATA/ATAPI-2 ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5 # 这颗硬盘缓冲存储器只有 2MB(BuffSize),但使用的是 udma5 !还可以。
由上个范例知道最大 16 位/UDMA 为 mode 5,所以可以配置为:
[[email protected] ~]# hdparm -d1 -c1 -X69 /dev/hdc
测试这颗硬盘的读取效能
[[email protected] ~]# hdparm -Tt /dev/hdc /dev/hdc: Timing cached reads: 428 MB in 2.00 seconds = 213.50 MB/sec Timing buffered disk reads: 114 MB in 3.00 seconds = 38.00 MB/sec # 鸟哥的这部测试机没有很好啦~这样的速度.....差强人意~
如果你是使用 SATA 硬盘的话,这个命令唯一可以做的,就是最后面那个测试的功能而已啰! 虽然这样的测试不是很准确,至少是一个可以比较的基准。鸟哥在我的 cluster 机器上面测试的 SATA (/dev/sda) 与 RAID (/dev/sdb) 结果如下,可以提供给你参考看看。
[[email protected] ~]# hdparm -Tt /dev/sda /dev/sdb /dev/sda: Timing cached reads: 4152 MB in 2.00 seconds = 2075.28 MB/sec Timing buffered disk reads: 304 MB in 3.01 seconds = 100.91 MB/sec /dev/sdb: Timing cached reads: 4072 MB in 2.00 seconds = 2036.31 MB/sec Timing buffered disk reads: 278 MB in 3.00 seconds = 92.59 MB/sec
转自 http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem_3.php