Linux对磁盘的查看、分区、格式化、挂载及IO性能测试

 

linux磁盘分区分为“主分区”、“扩展分区”和“逻辑分区”三种类型,一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个。且主分区+扩展分区总共不能超过4个。扩展分区是不能直接用的,他是以逻辑分区的方式来使用的,扩展分区可分成若干逻辑分区。他们的关系是包含的关系,所有的逻辑分区都是扩展分区的一部分。

 

在linux中所有的分区(主分区和逻辑分区)都是挂载在某个路径下的,例如:/; /home; /home/zhangsan; 这里/home对应的磁盘空间并不一定包含/home/zhangsan对应的磁盘空间,他们可能作为挂载点被不同的磁盘分区挂载,例如/home可能挂载到/dev/sda1分区,而/home/zhangsan可能挂载到/dev/sdb6分区。linux 中无论有几个分区,分给哪一目录使用,它归根结底就只有一个目录结构,一个独立且唯一的目录结构系统。接下来整理一下linux中对磁盘的查看、分区、格式化、挂载及相关IO性能测试相关的命令和工具。

 

磁盘与目录的查看

df命令查看文件系统磁盘占用情况

df命令可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息,它也可以显示所有文件系统对i节点和磁盘块的使用情况。可以使用df --help查看各个选项的含义,
df命令各个选项的含义如下:

 

-a:显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。
-k:以k字节为单位显示。
-i:显示i节点信息,而不是磁盘块。
-t:显示各指定类型的文件系统的磁盘空间使用情况。
-x:列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反)。
-T:显示文件系统类型。


df示例:查看磁盘块的基本信息

 

$df -h

结果如下:

 

文件系统        容量  已用  可用 已用% 挂载点
udev            5.8G     0  5.8G    0% /dev
tmpfs           1.2G  9.5M  1.2G    1% /run
/dev/sdb1       106G   71G   30G   71% /
tmpfs           5.8G   85M  5.7G    2% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           5.8G     0  5.8G    0% /sys/fs/cgroup
tmpfs           1.2G   80K  1.2G    1% /run/user/1000
/dev/sda1       141G  2.1G  132G    2% /home/wangd/disk1
/dev/sda2       318G   67M  302G    1% /home/wangd/disk2

 

df示例:查看磁盘分区的文件系统类型

df -hT	

执行结果如下:

 

文件系统       类型      容量  已用  可用 已用% 挂载点
udev           devtmpfs  5.8G     0  5.8G    0% /dev
tmpfs          tmpfs     1.2G  9.5M  1.2G    1% /run
/dev/sdb1      ext4      106G   71G   30G   71% /
tmpfs          tmpfs     5.8G   85M  5.7G    2% /dev/shm
tmpfs          tmpfs     5.0M  4.0K  5.0M    1% /run/lock
tmpfs          tmpfs     5.8G     0  5.8G    0% /sys/fs/cgroup
tmpfs          tmpfs     1.2G   80K  1.2G    1% /run/user/1000
/dev/sda1      ext4      141G  2.1G  132G    2% /home/wangd/disk1
/dev/sda2      ext4      318G   67M  302G    1% /home/wangd/disk2

du命令检查磁盘空间占用情况

du的英文原义为“disk usage”,含义为显示磁盘空间的使用情况,统计目录(或文件)所占磁盘空间的大小。该命令的功能是逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块(1024字节)的情况。若没有给出指定目录,则对当前目录进行统计。
du命令的各个选项含义如下:

 

-s:对每个Names参数只给出占用的数据块总数。
-a:递归地显示指定目录中各文件及子目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。
-b:以字节为单位列出磁盘空间使用情况(系统默认以k字节为单位)。
-k:以1024字节为单位列出磁盘空间使用情况。
-c:最后再加上一个总计(系统默认设置)。
-l:计算所有的文件大小,对硬链接文件,则计算多次。
-x:跳过在不同文件系统上的目录不予统计。


du示例:统计当前目录下的所有文件和文件夹的信息(不包含子目录)

 

$du -ah --max-depth=1

执行结果:

 

8.8G	./data
14G	./python
1.1G	./software
24G	.

fdisk -l查看磁盘信息

可使用fdisk -l观察磁盘之实体使用情形:

$fdisk -l

结果如下:

 

Disk /dev/sdb: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x38194aac


设备       启动     Start    末尾    扇区   Size Id 类型
/dev/sdb1            2048 225525759 225523712 107.6G 83 Linux
/dev/sdb2       225527806 250068991  24541186  11.7G  5 扩展
/dev/sdb5       225527808 250068991  24541184  11.7G 82 Linux 交换 / Solaris

其中上面一部分的意思是:硬盘总大小119.2G,250069680个扇区,扇区大小为512K,分区列表以一个扇区为基本单位,磁盘标识符是0x38194aac.

下面部分列出了该磁盘上各分区的具体信息。包括盘符名称、扇区起止及大小,磁盘分区类型等等。

lsscsi工具查看磁盘类型

对于使用scsi接口和使用ide的磁盘,可通过其盘符名称来区分:scsi类型的硬盘命名为sda-sdd等,而IDE类型的硬盘命名为hda-hdd等。但是SSD固态硬盘貌似使用的也是scsi接口,所以根据盘符的名称是判断不出来的。要想查看安装的硬盘哪些是固态硬盘,可使用lsscsi工具:

 

$apt-get install lsscsi
$lsscsi

执行结果如下:

[0:0:0:0]    disk    ATA      ST500LM021-1KJ15 LIM1  /dev/sda 
[1:0:0:0]    disk    ATA      PLEXTOR PX-128M6 1.01  /dev/sdb


结果的第四列就列出了磁盘的具体型号,查询可知/dev/sdb使用的是浦科特M6,128G的固态硬盘,而/dev/sda使用的是希捷7200转500G的硬盘。

磁盘分区、格式化及挂载

当我们新插入一块磁盘时候,我们需要为其创建分区,格式化各个分区,并将各个分区挂载到linux的目录结构上才可以使用。具体步骤如下:

 

查看待分区格式化磁盘

 

fdisk -l

结果如下:

Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x96304fd8




Disk /dev/sdb: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x38194aac


设备       启动     Start    末尾    扇区   Size Id 类型
/dev/sdb1            2048 225525759 225523712 107.6G 83 Linux
/dev/sdb2       225527806 250068991  24541186  11.7G  5 扩展
/dev/sdb5       225527808 250068991  24541184  11.7G 82 Linux 交换 / Solaris

可以看到新插入的/dev/sda并没有分区,因此在linux系统中无法使用。所以我们需要为该磁盘进行分区、格式化及挂载。

 

对磁盘进行分区

执行

 

$fdisk /dev/sda

结果如下:

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


命令(输入 m 获取帮助):

此时输入n回车来创建一个新的分区:

 

命令(输入 m 获取帮助): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

其中p代表主分区、e代表扩展分区,我们输入p创建一个主分区:

 

Select (default p): p
分区号 (1-4, default 1): 

需要输入1-4的分区号,形成的分区盘符的名字为/dev/sda1-/dev/sda4,选择默认的1:

 

分区号 (1-4, default 1): 1
First sector (2048-976773167, default 2048):

确定该分区的起始扇区,直接回车选择默认就好:

 

First sector (2048-976773167, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-976773167, default 976773167):

确定该分区的终止扇区,默认为该磁盘的终止扇区,如果只想为该磁盘分配一个分区,则直接回车选择默认就可。若想分配多个分区,则输入大概的终止扇区,这里我们填写3000000000:

 

Last sector, +sectors or +size{K,M,G,T,P} (2048-976773167, default 976773167): 300000000

Created a new partition 1 of type 'Linux' and of size 143.1 GiB.

命令(输入 m 获取帮助):

此时输入w回车,就可以保存我们创建的分区信息。然后使用fdisk -l查看

$fdisk -l
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x96304fd8


设备       启动 Start    末尾    扇区   Size Id 类型
/dev/sda1        2048 300000000 299997953 143.1G 83 Linux




Disk /dev/sdb: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x38194aac


设备       启动     Start    末尾    扇区   Size Id 类型
/dev/sdb1            2048 225525759 225523712 107.6G 83 Linux
/dev/sdb2       225527806 250068991  24541186  11.7G  5 扩展
/dev/sdb5       225527808 250068991  24541184  11.7G 82 Linux 交换 / Solaris

由上所示,我们已经创建了一个名为/dev/sda1的分区。同样的操作,可将剩余空间创建为/dev/sda2的分区,步骤省略。

将创建的分区格式化

创建完分区以后还需要将其格式化为具体的文件系统类型,此处我们将其格式化为ext4类型,执行:

 

$mkfs -t ext4 /dev/sda1

结果如下:

 

Creating filesystem with 37499744 4k blocks and 9379840 inodes
Filesystem UUID: ca87ed9d-c942-4a6e-b4d7-b9156f8a595d
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872


Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

此时,格式化已经完成,如果想在linux系统中使用,还需要挂载到某一个目录上才可以访问。

 

将分区挂载到文件系统目录上

linux挂载/取消挂载命令为mount/unmount,挂载只会影响到磁盘分区的访问路径,并不会影响到保存在磁盘分区中的内容。
创建目录/home/wangd/disk1, /home/wangd/disk2:

 

 

$mkdir /home/wangd/disk1
$mkdir /home/wangd/disk2

然后执行 

$mount /dev/sda1 /home/wangd/disk1
$mount /dev/sda2 /home/wangd/disk2

 

此时使用df -h查看,结果如下:

 

文件系统        容量  已用  可用 已用% 挂载点
udev            5.8G     0  5.8G    0% /dev
tmpfs           1.2G  9.5M  1.2G    1% /run
/dev/sdb1       106G   71G   30G   71% /
tmpfs           5.8G   77M  5.7G    2% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           5.8G     0  5.8G    0% /sys/fs/cgroup
tmpfs           1.2G   76K  1.2G    1% /run/user/1000
/dev/sda1       141G   60M  134G    1% /home/wangd/disk1
/dev/sda2       318G   67M  302G    1% /home/wangd/disk2


会发现新增加的分区已经挂载到目录上了。
另外,使用umount命令可以取消挂载,例如取消/dev/sda1到/home/wangd/disk1的挂载:

 

$umount /dev/sda1

设置开机自动挂载

上述使用mount完成的磁盘挂载在重启后会无效,若想重启后依然保留挂载信息,可以编辑设置/etc/fstab文件:

 

$sudo vim /etc/fstab

在最后添加两句:

 

/dev/sda1 /home/wangd/disk1 ext4 defaults 0 0
/dev/sda2 /home/wangd/disk2 ext4 defaults 0 0

其中:第1列是设备名或者卷标
第2列是挂载点(也就是挂载目录)
第3列是所要挂载设备的文件系统或者文件系统类型
第4列是挂载选项,通常使用defaults就可以
第5列设置是否使用dump备份,置0为不备份,置1,2为备份,但2的备份重要性比1小
第6列设置是否开机的时候使用fsck检验所挂载的磁盘,置0为不检验,置1,2为检验,但置2盘比置1的盘晚检验。
保存并退出后,以后每次重启就会发现挂载信息已经自动完成。

 

磁盘IO性能测试

 

使用hdparm测试IO读

hdparm工具可以查看硬盘的相关信息或对硬盘进行测速、优化、修改硬盘相关参数设定,主要用来测试硬盘速度。

 

语法:hdparm [-CfghiIqtTvyYZ][-a <快取分区>][-A <0或1>][-c ][-d <0或1>][-k <0或1>][-K <0或1>][-m <分区数>][-n <0或1>][-p ][-P <分区数>][-r <0或1>][-S <时间>][-u <0或1>][-W <0或1>][-X <传输模式>][设备]

参数说明:

 

-a<快取分区> 设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定。
-A<0或1> 启动或关闭读取文件时的快取功能。
-c 设定IDE32位I/O模式。
-C 检测IDE硬盘的电源管理模式。
-d<0或1> 设定磁盘的DMA模式。
-f 将内存缓冲区的数据写入硬盘,并清楚缓冲区。
-g 显示硬盘的磁轨,磁头,磁区等参数。
-h 显示帮助。
-i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。
-I 直接读取硬盘所提供的硬件规格信息。
-k<0或1> 重设硬盘时,保留-dmu参数的设定。
-K<0或1> 重设硬盘时,保留-APSWXZ参数的设定。
-m<磁区数> 设定硬盘多重分区存取的分区数。
-n<0或1> 忽略硬盘写入时所发生的错误。
-p 设定硬盘的PIO模式。
-P<磁区数> 设定硬盘内部快取的分区数。
-q 在执行后续的参数时,不在屏幕上显示任何信息。
-r<0或1> 设定硬盘的读写模式。
-S<时间> 设定硬盘进入省电模式前的等待时间。
-t 评估硬盘的读取效率。
-T 平谷硬盘快取的读取效率。
-u<0或1> 在硬盘存取时,允许其他中断要求同时执行。
-v 显示硬盘的相关设定。
-W<0或1> 设定硬盘的写入快取。
-X<传输模式> 设定硬盘的传输模式。
-y 使IDE硬盘进入省电模式。
-Y 使IDE硬盘进入睡眠模式。
-Z 关闭某些Seagate硬盘的自动省电功能。

 

使用hdparm测试硬盘速度示例如下:

 

$sudo hdparm -t /dev/sda1

/dev/sda1:
Timing O_DIRECT disk reads: 386 MB in  3.00 seconds = 128.63 MB/sec

 

$sudo hdparm -t /dev/sdb1

/dev/sdb1:
Timing O_DIRECT disk reads: 968 MB in  3.00 seconds = 322.62 MB/sec

-t用来测试硬盘的读取速度,由上可见,在我本机上,固态硬盘读取速度是322M/S,而普通用盘只有128M/S。

 

 

 

$sudo hdparm -T /dev/sda1

/dev/sda1:
Timing cached reads:   9514 MB in  2.00 seconds = 4758.91 MB/sec

 

$sudo hdparm -T /dev/sdb1

/dev/sdb1:
Timing cached reads:   11924 MB in  2.00 seconds = 5965.05 MB/sec

-T用来测试硬盘缓存的读取速度,由上可见,硬盘缓存的读取速度大幅升高。

使用dd测试磁盘IO读写速度

dd是一个非常有用的命令,其作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换,所以可以用来测试硬盘的顺序读写能力。可以写文件,可以写裸设备。

 

语法:dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][--help][--version]

参数:

 

bs=<字节数>   将ibs( 输入)与obs(输出)设成指定的字节数。
cbs=<字节数>   转换时,每次只转换指定的字节数。
conv=<关键字>   指定文件转换的方式。
count=<区块数>   仅读取指定的区块数。
ibs=<字节数>   每次读取的字节数。
if=<文件>   从文件读取。
obs=<字节数>   每次输出的字节数。
of=<文件>   输出到文件。
seek=<区块数>   一开始输出时,跳过指定的区块数。
skip=<区块数>   一开始读取时,跳过指定的区块数。
--help   帮助。
--version   显示版本信息。

ps常用参数详解:

 

  • if=xxx  从xxx读取,如if=/dev/zero,该设备无穷尽地提供0,(不产生读磁盘IO)
  • of=xxx  向xxx写出,可以写文件,可以写裸设备。如of=/dev/null,"黑洞",它等价于一个只写文件. 所有写入它的内容都会永远丢失. (不产生写磁盘IO)
  • bs=8k  每次读或写的大小,即一个块的大小。
  • count=xxx  读写块的总数量。

使用dd测试磁盘写速度的示例如下:

 

 

$dd bs=1024k count=2000 if=/dev/zero of=/home/wangd/disk1/testdata conv=fsync

该命令的意思是:对磁盘进行连续写入,不使用内存缓冲区,每次写入1m的数据,总共写入20000次,产生2G大小的文件。执行结果如下:

 

disk1/testdata conv=fsync
记录了2000+0 的读入
记录了2000+0 的写出
2097152000 bytes (2.1 GB, 2.0 GiB) copied, 15.5791 s, 135 MB/s

注意:命令的最后conv=fsync是保证dd命令执行到最后会真正执行一次“同步(sync)”操作,,这样算出来的时间才是比较符合实际使用结果的。否则可能只是写到缓存中而并没有实际的写进硬盘里,造成测试失准。

 

此外在测试的时候可以结合iostat对系统磁盘进行监控。

 

 

 

 

 

 

参考资料:

http://os.51cto.com/art/201012/240726.htm
http://blog.csdn.net/buxiaoxindasuile/article/details/49612867
http://www.ha97.com/4963.html
http://elf8848.iteye.com/blog/2089055

 

 

 

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值