五尘

有一种殇叫做“原来这个神经病来自七院”

导航

磁盘参数修订[转自vbird]

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

 

mknod

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

 

复制代码
[root@www ~]# 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 就得要知道如何操作才行!

使用参数

复制代码
[root@www ~]# mknod 装置文件名 [bcp] [Major] [Minor]
选项与参数:
装置种类:
   b  :配置装置名称成为一个周边储存设备文件,例如硬盘等;
   c  :配置装置名称成为一个周边输入设备文件,例如鼠标/键盘等;
   p  :配置装置名称成为一个 FIFO 文件;
Major :主要装置代码;
Minor :次要装置代码;
复制代码

 

由上述的介绍我们知道 /dev/hdc10 装置代码 22, 10,请创建并查阅此装置

[root@www ~]# mknod /dev/hdc10 b 22 10
[root@www ~]# ll /dev/hdc10
brw-r--r-- 1 root root 22, 10 Oct 26 23:57 /dev/hdc10
# 上面那个 22 与 10 是有意义的,不要随意配置啊!

 

创建一个 FIFO 文件,档名为 /tmp/testpipe

[root@www ~]# mknod /tmp/testpipe p
[root@www ~]# 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 的名称了!

 

使用参数

[root@www ~]# e2label 装置名称  新的Label名称

 

将 /dev/hdc6 的标头改成 my_test 并观察是否修改成功?

复制代码
[root@www ~]# dumpe2fs -h /dev/hdc6
Filesystem volume name:   vbird_logical  <==原本的标头名称
.....底下省略.....

[root@www ~]# e2label /dev/hdc6 "my_test"
[root@www ~]# dumpe2fs -h /dev/hdc6
Filesystem volume name:   my_test        <==改过来啦!
.....底下省略.....
复制代码

 

tune2fs

[root@www ~]# tune2fs [-jlL] 装置代号
选项与参数:
-l  :类似 dumpe2fs -h 的功能~将 superblock 内的数据读出来~
-j  :将 ext2 的 filesystem 转换为 ext3 的文件系统;
-L  :类似 e2label 的功能,可以修改 filesystem 的 Label 喔!

 

列出 /dev/hdc6 的 superblock 内容

[root@www ~]# tune2fs -l /dev/hdc6

这个命令的功能其实很广泛啦~上面鸟哥仅列出很简单的一些参数而已, 更多的用法请自行参考 man tune2fs 。比较有趣的是,如果你的某个 partition 原本是 ext2 的文件系统,如果想要将他升级成为 ext3 文件系统的话,利用 tune2fs 就可以很简单的转换过来啰~

 

hdparm

如果你的硬盘是 IDE 接口的,那么这个命令可以帮助你配置一些进阶参数!如果你是使用 SATA 接口的, 那么这个命令就没有多大用途了!另外,目前的 Linux 系统都已经稍微优化过,所以这个命令最多是用来测试效能啦! 而且建议你不要随便调整硬盘参数,文件系统容易出问题喔!除非你真的知道你调整的数据是啥!

复制代码
[root@www ~]# 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 模式

复制代码
[root@www ~]# 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,所以可以配置为:

[root@www ~]# hdparm -d1 -c1 -X69 /dev/hdc

 

测试这颗硬盘的读取效能

[root@www ~]# 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) 结果如下,可以提供给你参考看看。

复制代码
[root@www ~]# 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

posted on 2015-11-28 15:59  五尘  阅读(204)  评论(0编辑  收藏  举报