[TOC]
基础知识
-
磁道 Track:一个磁盘上 的一个圆圈为一个磁道,而许多同心圆组起来就是盘面。
-
扇区 Sector:磁道上是有若干弧形组成,每个弧形就是一个扇区,扇区大小是固定的为512bytes。
-
柱面 Cylinder:每个盘面都被划分为数目相等的磁道,并从外缘的0开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。柱面是由半径相同的一组同心圆组成,形成一个圆柱体。柱面是分区的最小单位。
-
磁盘分区就是指指定分区的起始和结束柱面。
-
第一个扇区里面有硬盘的主引导记录MBR以及分区表的信息。
MBR站446bytes,partition table占64bytes。
由于分区表只有64bytes,所以最多只能记录四条分区记录,分为主primary分区和扩展extended分区。扩展分区还能再分出逻辑分区logical。
扩展分区最多只能有一个,操作系统限制的。
能被格式化的只有主分区和逻辑分区,扩展分区无法格式化。
-
文件系统中,有如下区分:
super block:记录此文件的整体信息,包括inode/block的总量,使用量,剩余量,以及文件系统的格式和相关信息等。
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。
block:记录实际文件的内容,若文件太大时,会占用多个block。
文件系统会先格式化出inode与block的块。
通过找到inode再来找到对应的block成为索引式文件系统。而FAT格式的没有inode,每个block号码都记录找在前一个block中。
-
一般格式化后block的大小就固定了,一般可选1KB,2KB,4KB。每个block里只能放一个文件。
-
由于每个inode只有一个文件,所以文件系统能创建的文件数量和inode的数量有关。而由于inode的大小有限,单个文件大小也有限制,但是文件系统能通过block来记录其他block。
拿到新硬盘三部曲
分区
-
2T以内
fdisk -l
找到系统所有分区
fdisk /dev/sda
对磁盘进行分区,这里没有123编号,因为是对磁盘分区而不是对分区分区
这时会出现帮助提示,m为帮助,这里可以进行操作,一般步骤为:
n 新建分区新建后首先会让选择分区类型,扩展分区或者主分区,扩展分区一般不能直接用,而要被再划分成逻辑分区。
还能设置分区大小,比如+1GBp 显示现有分区
q 不保存退出
d 删除分区,后面接分区编号
w 保存所有改动,如果不w,则所有改动都不生效 -
大于2T
parted /dev/sda print
列出本机该磁盘的分区资料
parted /dev/sda mkpart primary ext4 1MB 1.5TB
这里的mkpart是新建分区,类型有primary,extended,logical,后面是起始容量和结束容量
parted /dev/sda rm 2
后面的2代表分区编号,这里执行就马上删了
格式化
-
mkfs -t ext4 /dev/sda1
这里对分区进行格式化,t后面跟文件系统格式
起始mkfs是综合命令,他会调用系统的mkfs.ext4来进行格式化操作
这个命令会自动把block设置成4K -
mke2fs 这个命令可以手动设置block大小个各种参数比如卷标
挂载
-
mount -a
自动从/etc/fstab挂载,一般用于测试fstab写的是否正确
mount -l
显示目前所有挂载情况,l参数能显示label信息
mount /dev/sda1 /data
,把sda1挂载到data
-
umount /data
卸载
-
开机启动放在/etc/fstab,按照如下格式加一行
/dev/sda2 /root ext4 defaults 0 0
修改完卸载所有,然后执行mount -a
-
fuser
当需要umount一个分区的时候,提示繁忙,这个时候需要找出是那些进程在占用分区,就可以使用这个命令
fuser -m -v /dev/sda1 #m代表mount,显示所有占用的进程,v是verbose,显示完整的信息 fuse -m -i -k /dev/sda1 #把占用的进程找出来并且都kill掉,i参数为互动模式
查看磁盘容量
-
df -h
显示文件系统整体磁盘容量,也能看到所有挂载情况
-
du -sh /data
显示data目录下的磁盘占用,用人性化的容量显示,不显示子文件夹的容量而显示所有的
测试
测试硬盘写入速度,可以使dd命令生成一个大文件:
dd if=/dev/zero of=/data/filename bs=1M count=1024 conv=fdatasync
if指的input file,zero是一个输出0的设备,of指output file,bs指block大小,count指bs个数
问: 以下几种方式测试磁盘读写速度有什么区别?
col1 col2 1 ddbs=1M count=128 if=/dev/zero of=test 2 dd bs=1M count=128 if=/dev/zero of=test; sync 3 dd bs=1M count=128 if=/dev/zero of=test conv=fdatasync 4 dd bs=1M count=128 if=/dev/zero of=test oflag=dsync 答:区别在于内存中写缓存的处理方式。
ddbs=1M count=128 if=/dev/zero of=test
没有加任何参数,dd默认的方式不包括“同步(sync)”命令。也就是说,dd命令完成前并没有让系统真正把文件写到磁盘上。所以以上命令只是单纯地把这128MB的数据读到内存缓冲当中(写缓存[write cache])。所以你得到的将是一个超级快的速度。因为其实dd给你的只是读取速度,直到dd完成后系统才开始真正往磁盘上写数据,但这个速度你是看不到了。所以如果这个速度很快,先不要偷着乐。呵呵
ddbs=1M count=128 if=/dev/zero of=test; sync
和前面1中的完全一样。分号隔开的只是先后两个独立的命令。当sync命令准备开始往磁盘上真正写入数据的时候,前面dd命令已经把错误的“写入速度”值显示在屏幕上了。所以你还是得不到真正的写入速度。
ddbs=1M count=128 if=/dev/zero of=test conv=fdatasync
加入这个参数后,dd命令执行到最后会真正执行一次“同步(sync)”操作,所以这时候你得到的是读取这128M数据到内存并写入到磁盘上所需的时间,这样算出来的时间才是比较符合实际的。
ddbs=1M count=128 if=/dev/zero of=test oflag=dsync
加入这个参数后,dd在执行时每次都会进行同步写入操作。也就是说,这条命令每次读取1M后就要先把这1M写入磁盘,然后再读取下面这1M,一共重复128次。这可能是最慢的一种方式了,因为基本上没有用到写缓存(write cache)。
问:那应该用哪一种呢?
答:建议使用ddbs=1M count=128 if=/dev/zero of=test conv=fdatasync
因为这种方式最接近计算机实际操作,所以测出来的数据最有参考价值。
来源:http://blog.csdn.net/xrb66/article/details/7180919
系统级别监控:iostat
进程级别监控:iotop
备份
-
cp,显示不了进度,v参数只能显示当前复制的文件
cp -ravi /data/* /mnt/king
r遍历
a相当于d保持连接p保持属性r递归,加了a后r不用加
v显示当前复制的文件
i交互模式cp 拷贝文件时,如果目标文件存在,则把文件截短为0,然后把新内容写入;如果目标文件不存在,则创建文件,然后把文件写入目标文件。
规划
- /mnt 临时挂载,一般用来显示u盘等
- /data 一般用来放置软件产生的或者自身有价值的文件,比如nginx的wwwroot目录
- /media 一般用来放置挂载的硬盘等