Linux磁盘使用及文件系统管理
欢迎来到 来到大浪涛天的博客 !
一、Linux磁盘使用及文件系统管理
1. mount 命令
mount [-fnrsvw] [-t vfstype] [-o options] device dir
1-1. 命令选项:
- -r:只读
- -w:只写
- -n:默认情况下设备的挂载和卸载的操作会同步更新到/etc/mtab文件中,-n用于禁止此特性
- -t vfstype:指明要挂载的文件系统的类型,多数情况下可以省略,此时mount通过blkid来判断要挂载设备的文件系统类型
- -L:挂载的时候以卷标的方式指明设备
[root@test01 /]# mke2fs -L mydata /dev/sdb1
[root@test01 /]# blkid /dev/sdb1
/dev/sdb1: LABEL="mydata" UUID="6e6ccefa-884b-4271-8547-8368637c15dd" TYPE="ext2"
[root@test01 /]# mount -L mydata /mnt
- -U:挂载的时候以uuid来指明设备
[root@test01 mnt]# blkid /dev/sdb1
/dev/sdb1: UUID="b95393c7-b40d-4767-9d5a-be05c811ed0d" TYPE="xfs"
[root@test01 mnt]# mount -U b95393c7-b40d-4767-9d5a-be05c811ed0d /mnt
- -o options:挂载选项
- sync/async:同步/异步操作;
- atime/noatime:文件或目录被访问时是否更新其访问时间戳;同时对文件和目录生效,关闭对性能有大幅度提升,Centos7 上默认是延迟的,所以有时候访问文件的时候,访问的时间戳没有即时更新
- diratime/nodiratime:目录在访问时是否更新其访问的时间戳;只对目录生效,关闭对性能有大幅度提升,Centos7 上默认是延迟的,所以有时候访问文件的时候,访问的时间戳没有即时更新
- acl:支持使用文件acl功能
- remount:重新挂载后面添加新的属性,例如下面这个,重新挂载让/dev/sdb1这分区支持acl。
[root@test01 /]# mount -o remount,acl /mnt
[root@test01 /]# setfacl -m u:test:rw- /mnt/fstab
[root@test01 /]# getfacl /mnt/fstab
可以使用tune2fs来更改文件系统的选项,让该文件系统支持acl的功能,这样即使mount -o 没加acl的选项依然支持acl,如:
[root@test01 /]# tune2fs -o acl /dev/sdb1
[root@test01 /]# tune2fs -l /dev/sdb1 |grep "Default mount"
Default mount options: user_xattr acl
- ro:只读
- rw:读写
- dev/nodev:此设备是否允许创建设备文件
- exec/noexec:此设备是否允许被执行程序文件
- auto/noauto:此设备是否允许自动挂载
- user/nouser:是否允许普通用户挂载文件系统
- suid/nosuid:是否允许程序文件上的suit/guid权限生效
- defaults: Use default options: rw, suid, dev, exec, auto, nouser, and async.
1-2. mount 的bind功能
可以实现将一个目录绑定到另外一个目录,作为其临时访问入口
[root@test01 etc]# mkdir /network
[root@test01 etc]# mount --bind /etc/sysconfig/network-scripts/ /network/
[root@test01 etc]# ls /network |grep ifcfg-eth0
ifcfg-eth0
[root@test01 etc]# umount /network/
[root@test01 etc]# ls /network |grep ifcfg-eth0
[root@test01 etc]# echo $?
1
1-3. 查看当前系统下的mount选项
mount
cat /etc/mtab
cat /etc/proc/mounts
[root@test01 etc]# cat /proc/mounts
1-4. 挂载特殊设备如光盘和iso文件
挂载光盘
mount -r /dev/cdrom /mnt
sr0是指sata接口的光驱设备
[root@test01 etc]# mount -r /dev/cdrom /media/
mount: 在 /dev/sr0 上找不到媒体
挂载本地的回环设备,如.iso或者.img等设备
mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT
1-5. umount的特殊情况处理
umount:如果卸载出现繁忙,有用户在访问,强行卸载 umount -lf
[root@test01 ~]# umount /mnt
umount: /mnt:目标忙。
(有些情况下通过 lsof(8) 或 fuser(1) 可以
找到有关使用该设备的进程的有用信息)
[root@test01 ~]# lsof /mnt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1619 root cwd DIR 8,17 4096 2 /mnt
[root@test01 ~]# fuser -v /mnt
用户 进程号 权限 命令
/mnt: root kernel mount /mnt
root 1619 ..c.. bash
[root@test01 ~]# fuser -km /mnt
/mnt: 1619c
[root@test01 ~]# umount /mnt
2. swap文件的创建及启用
生产环境中sawp分区格外重要,特别是针对内存不够的服务器,当系统内存不够的时候,Kernel会将一部分睡眠状态的存储在内存的数据转储到swap分区当中,这样当转储完成后系统可以从内存空间释放这部分内存,
重新分配给需要内存的其他程序,所以swap分区也叫交换分区,值得注意的是交换分区的大小不是越大越好的,一般最大只能是内存的两倍,当内存足够大的时候,交换分区建议设置成和内存相同大小,因为交换分区
是直接使用硬盘的,当交换分区里的数据量太大很可能会出现性能瓶颈的。
2-1. mkswap 创建swap文件
mkswap 创建swap文件,用于增加swap分区的空间,如:
[root@test01 ~]# mkswap /dev/sdb1
mkswap: /dev/sdb1: warning: wiping old ext2 signature.
正在设置交换空间版本 1,大小 = 2096124 KiB
无标签,UUID=d869ebd3-e8f0-48a7-995a-f9d98862ec67
2-2. swapon,swapoff的用法
swapon和swapoff 分别用于启动和关闭swap文件,例如:
[root@test01 ~]# free -m |grep Swap
Swap: 1023 1 1022
[root@test01 ~]# swapon /dev/sdb1
[root@test01 ~]# free -m |grep Swap
Swap: 3070 1 3069
[root@test01 ~]# swapoff /dev/sdb1
[root@test01 ~]# free -m |grep Swap
Swap: 1023 1 1022
2-3. swap -a 的参数
-a 是自动挂载/etc/fstab里面设定了的swap分区,当/etc/fstab里定义好了,可以直接用swapon -a实现自动挂载swap文件。
3. /etc/fstab 文件:
设定除根文件系统以外的其他文件系统能够开机时自动挂载,每行定义一个要挂载的文件系统及相关属性,其中fstab包含6个字段,字段的相关详解如下:
- 要挂载的设备:
- 设备文件
- LABLE
- UUID
- 伪文件系统:如sysfs,proc,tmpfs等
- 挂载点
swap 类型的文件挂载点为swap,其余的为自己设置的挂载点 - 文件系统类型
- 挂载选项
- defaults,使用默认的挂载选项,centos7中的默认挂载选项有:rw, suid, dev, exec, auto, nouser, and async
- 如果有多个挂载选项,彼此之间以“,”相分隔,如:
defaults,acl,noatime,noexec
- 转储频率
- 0: 从不备份;
- 1: 每天备份;
- 2: 每隔一天备份;
- 自检次序:
- 0: 从不自检
-
- 首先自检,通常用于根文件系统,其他文件系统不能用1,否则会到维护模式
-
- 次级自检
4. df命令
df 用于显示文件系统磁盘空间的使用情况,命令格式为:
df [OPTION]... [FILE]...
常见参数有:
- -l: 仅显示本地文件系统的相关信息,网络文件系统则不显示
[root@test01 ~]# mount -t nfs 10.211.55.241:/home/test/1 /mnt
[root@test01 ~]# df -l |grep "/mnt"
[root@test01 ~]# df -h |grep "/mnt"
10.211.55.241:/home/test/1 30G 12G 18G 40% /mnt
- -h: 常见的格式显示出大小(例如:1K 234M 2G)
[root@test01 ~]# df -k |grep "/mnt"
10.211.55.241:/home/test/1 30705152 11980800 18724352 40% /mnt
[root@test01 ~]# df -h |grep "/mnt"
10.211.55.241:/home/test/1 30G 12G 18G 40% /mnt
- -i 显示inode的使用状态而非blocks的使用状态
[root@test01 ~]# df -i |head -n 2
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos_centos7--tmp-root 15360000 144235 15215765 1% /
5. du命令
显示指定的文件已使用的磁盘空间的总量,包括在层次结构中以 这些以指定文件为根的目录在内。这里的“已使用的磁盘空间”意思 为指定的文件下的整个文件层次结构所使用的空间。
在没给定参数的情况下,du 报告当前目录所使用的磁盘空间,命令格式为:
du [options] [file...]
常见参数有:
- -s: sumary,显示目录时不是显示某个文件的大小,而是显示目录的总的大小
[root@test01 ~]# du -sh /usr
3.3G /usr
- -h: 常见的格式显示出大小(例如:1K 234M 2G)
[root@test01 ~]# du -sh /etc
41M /etc