第5-6讲:Linux下磁盘管理

回复 收藏
内容概要:

1. 查看磁盘或者目录的容量
df  查看磁盘各分区使用情况
   不加参数以k为单位
   df -i inode数,df -h  以G或者T或者M
   df -m  以M单位显示  
du 查看目录或者文件的容量
   不加参数 以k为单位显示
   -s 列出总和 -a  列出所有文件和目录
   -k 以k为单位 -m  以M为单位
   -h 最合适的单位  最常用组合 -sh
扩展 ls -lh 看到的大小和du相比(ls -lh是实际大小;du是占用多少空间,一般都是4K的整数倍(取决与你格式化时候指定的block大小))

2. 磁盘的分区和格式化
fdisk -l  查看磁盘和分区,大于2T用GPT(使用parted实现对GPT的分区操作)
fdisk  设备名 m 列出常用命令,常用的有‘p’, ‘n’, ‘d’, ‘w’, ‘q’.
mke2fs, mkfs.ext2, mkfs.ext3, mkfs.ext4
-t 文件系统格式 ext3 ext4

[root@csr test]# cat /etc/filesystems 查看系统支持的文件类型有哪些
[root@csr test]# ll /lib/modules/$(uname -r)/kernel/fs/ 查看相关文件系统的驱动程序
-b 指定每个数据块大小,目前支持1024, 2048 及4096
-L 分区标签    (可以用e2label查看或修改分区的标签,然后指定标签挂载)
格式化时默认blocks (5.00%) reserved for the super user  //给超级用户预留的一部分空间,用来作为特殊用途
-m <百分比值>   指定给root保留区块的比例,默认是5%(防止block被用光了(比如某个用户随便乱用磁盘空间而你又没有对他进行空间的限制),如果你有指定root的块比例,这时候就可以进行一些操作解决了)

可以更改这个比例,如 mke2fs -m 0.1 /dev/sdb1   //意思是,只预留出0.1%

3. 挂载、卸载磁盘分区
mount 不加任何选项和参数,查看已经挂载情况
mount 格式  mount -t type  /dev/sda5  /mnt
mount -t 指定挂载分区格式,如 -t ext3

经常都是直接:mount /dev/sda5 /mnt    (因为大部分情况下linux可以根据superblock找出其文件类型然后自动挂载的)
umount  /dev/sda5 或者 umount /mnt
注:umount后边可以跟挂载点,也可以跟分区名(/dev/hdb1), 但是不可以跟LABEL和UUID.
umount -l  强制卸载    (这个选项的强制删除比-f还流氓,还强大)



mount  -o 后面跟各种选项,比如remount,ro,noatime等,具体选项如下:
“async/sync” : async表示和磁盘和内存不同步,系统每隔一段时间把内存数据写入磁盘中,而sync则会时时同步内存和磁盘中数据;
“auto/noauto” : 开机自动挂载/不自动挂载;
“default” : 按照大多数永久文件系统的缺省值设置挂载定义,它包含了rw, suid, dev, exec, auto, nouser, async
“ro” : 按只读权限挂载 ;
“rw” : 按可读可写权限挂载 ;
“exec/noexec” : 允许/不允许可执行文件执行,但千万不要把根分区挂载为noexec,那就无法使用系统了,连mount命令都无法使用了,这时只有重新做系统了;
“user/nouser” : 允许/不允许root外的其他用户挂载分区,为了安全考虑,请用nouser ;
“suid/nosuid” : 允许/不允许分区有suid属性,一般设置nosuid ;
“usrquota” : 启动使用者磁盘配额模式,磁盘配额相关内容在后续章节会做介绍;
“grquota” : 启动群组磁盘配额模式;

mount -a  会根据/etc/fstab 挂载所有分区

[root@csr test]# mount -n -o remount,rw,auto /   
(用途:单用户模式下'/'是ro只读的,要想让其可读写就要重新挂载,但是重新挂载会更新写入/etc/mtab;所以还要加上-n选项不让他
写入(为什么不让他写入啊?因为这个时候'/'都是只读的你怎么让他写入/etc/mtab?))


说到这里就顺便简单介绍下'/etc/mtab'吧:(还有个/etc/fstab,可以自己去查资料看看他们的联系)
mount的时候,系统都会自动去更新mtab将更新的内容写入里面的;当我们使用mount,df等命令查看挂载的分区的时候,其实读取的都是这个文件的内容的...这里就不介绍什么例子和拓展了,mount的内容实际上还是非常多的,比如常用的mount CD,USB,iso文件,mount目录(和软连接类似,在做ftp和固件开发的时候非常的好用)等等,说了大概要讲好久的...

UUID是如何来的,使用命令 blkid

这里也简略介绍下UUID吧:
UUID是一个标帜你系统中的存储设备的字符串,其目的是帮助使用者唯一的确定系统中的所有存储设备,不管它们是什么类型的。着重看那个“唯一的确定”就行了(想了解更详细的可以自己去找下资料,这里都只是简短的介绍下的)

blkid命令 后可以不跟设备名,列出所有   
mount UUID=“……” /mnt
使用UUID的好处是,多块磁盘,如果在服务器上换了插槽位置,设备名会变,但UUID是唯一的
(实际上还有个LABEL挂载,可是个人感觉没必要记,因为直接挂载最方便,而要想唯一确定存储设备用UUID是最好的...所以LABEL只要稍微去了解下就行了)

4. 配置文件 /etc/fstab
第一列就是分区的标识,可以LABEL,也可以UUID,当然也可以 (/dev/sda1);
第二列是挂载点;
第三列是分区的格式;
第四列则是mount的一些挂载参数,一般情况下,直接写defaults即可;
第五列的数字表示是否被dump备份,是的话这里就是1,否则就是0;第六列是开机时是否自检磁盘。1,2都表示检测,0表示不检测,/ 分区必须设为1,而且整个fstab中只允许出现一个1,1比2优先级高,所以先检测1,然后再检测2,如果有多个分区需要开机检测那么都设置成2吧,1检测完了后会同时去检测2。



开机自动挂载可以写到/etc/fstab或/etc/rc.local里面
比较下两种方法的优劣:
/etc/rc.local:写到这里面最简单方便,不用去记fstab里面参数的格式;
               但是这种最不可靠;举个例子吧:
               比如执行 /usr/local/bin/ 目录中的命令的时候没有使用绝对路径,这时候命令就不会执行成功了;

               因为在执行rc.local脚本时,PATH环境变量未全部初始化,目录/usr/local/bin/ 需在执行/etc/profile(执行顺序在前                           面的开机启动流程应该都了解了的) 后才被添加到环境变量PATH中。
/etc/fstab: 这个虽然写的时候麻烦,不过最放心,可靠...所以说最好不要偷懒图方便,开机自动挂载写到这里是最合适的

5. lvm配置(这个我记得云协作里面已经有介绍了...)
LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。支持动态扩充磁盘空间。
首先从空的硬盘sdb上创建两个分区sdb1 1G, sdb2 2G。
1)创建逻辑卷
pvcreate /dev/sdb1 /dev/sdb2   //创建物理卷
pvdisplay   //可以列出已经创建的物理卷
vgcreate vgdata /dev/sdb1 /dev/sdb2        //创建卷组 vgdata ,并将刚才创建好的两个物理卷加入该卷组
vgdisplay //可以列出已经建好的卷组
# 默认PE大小为4MB,PE是卷组的最小存储单元.可以通过 –s参数修改大小。

lvcreate -L 500M -n lvdata1 vgdata  //分割500M给新的逻辑卷lvdata1
lvdisplay //列出当前的逻辑卷

mkfs.ext4 /dev/vgdata/lvdata1  //格式化逻辑卷
mount /dev/vgdata/lvdata1  /aming  //挂载逻辑卷

2) 扩展逻辑卷
逻辑卷lvdata1不够用了,我们如何给他增加空间呢?
lvextend –L +500M /dev/vgdata/lvdata1  //给lvdata1增加500M空间。
resize2fs  /dev/vgdata/lvdata1  //同步文件系统


3)扩展卷组
当卷组不够用的情况下,我们也是可以扩展卷组的。我们再创建一个新的分区叫做/dev/sdb3.
vgextend vgdata /dev/sdb3  //把sdb3加入到卷组vgdata中

4)减少逻辑卷大小
卸载 --> e2fsck 检测剩余空间 --> resize2fs 同步文件系统 --> 使用lvreduce命令将逻辑卷减少
注意:文件系统大小和逻辑卷大小一定要保持一致才行。如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费。

umount  /data1
e2fsck -f /dev/mapper/vgdata-lvdata1
resize2fs /dev/mapper/vgdata-lvdata1 700M
lvreduce -L 700M /dev/vgdata/lvdata1
mount /dev/vgdata/lvdata1 /data1

5) 当磁盘或分区损坏时,如何转移数据
pvmove 转移空间数据 --> vgreduce命令将即将坏的磁盘或者分区从卷组vgdata里面移除除去 --> pvremove命令将即将坏的磁盘或者分区从系统中删除掉 --> 拆除或修复磁盘
pvmove /dev/sdb1
vgreduce vgdata /dev/sdb1
pvremove  /dev/sdb1

6) 删除整个逻辑卷
umount卸载逻辑卷 --> 修改配置文件/etc/fstab(若是之前更改过) --> lvremove 删除逻辑卷lvdata1 --> vgremove 删除卷组vgdata --> pvremove 将物理卷转化成普通分区
umount /dev/vgdata/lvdata1
lvremove /dev/vgdata/lvdata1
vgremove vgdata
pvremove /dev/sdb2
pvremove /dev/sdb3








2014-11-25 17:22 举报
已邀请:
0

akellydgh

赞同来自:

好,可以看看了,谢谢
0

崔志朋

赞同来自:

我喜欢这样的
0

wuhen

赞同来自:

有心了{:4_107:}
0

王肖强

赞同来自:

好! 可以拿你的帖子当大纲讲课了。
0

MR_K

赞同来自:

写的非常好,我要借鉴一些写到我自己的笔记咯....
0

csr

赞同来自:

MR_K 发表于 2014-11-26 22:38
写的非常好,我要借鉴一些写到我自己的笔记咯....

嗯,记得写好完整的笔记发我一份就好...自己写的笔记总感觉不好看...

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: