linux学习29 Linux磁盘使用及文件系统管理企业级实战
一、文件系统的使用
1、首先要"挂载":mount命令和umount命令
2、根文件系统之外的其它文件系统要想能够被访问,都必须通过关联至根文件系统上的某个目录来实现。此关联操作即为“挂载”,此目录即为“挂载点”。
挂载点:mount_point,用于作为另一个文件系统的访问入口
(1)、事先存在
(2)、应该使用未被或不会被其它进程使用到的目录
(3)、挂载点下原有的文件将会被隐藏
3、mount命令
mount [-fnrsvw] [-t vfstype] [-o options] device dir
a、显示当前挂载的所有文件系统直接使用mount命令
[root@localhost ~]# mount sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) devtmpfs on /dev type devtmpfs (rw,nosuid,size=1007264k,nr_inodes=251816,mode=755) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755) cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd) pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio) configfs on /sys/kernel/config type configfs (rw,relatime) /dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota) systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=33,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=12872) mqueue on /dev/mqueue type mqueue (rw,relatime) debugfs on /sys/kernel/debug type debugfs (rw,relatime) hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime) /dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota) tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=203912k,mode=700)
b、命令选项
-a:将/etc/fstable所有定义的支持自动挂载的设备都给挂上来,已经挂上来的就不管,没挂上来的就自动挂上来
-r:readonly,只读挂载;光驱就只能只读
-w:read and write,读写挂载,默认就是读写挂载的
-n:默认情况下,当前文件系统上的挂载和卸载等操作都是会被写入/etc/mtab上去的。-n用于禁止此特性。
-t vfstype:指明要挂载的设备上的文件系统的类型,多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型。
-L LABEL:挂载时以卷标的方式指明设备。
mount -L LABEL dir
-U UUID:挂载时以UUID的方式指明设备
mount -U UUID dir
-o options:挂载选项
sync/async:同步/异步操作;
atime/noatime:文件或目录在被访问时是否更新其访问时间戳
diratime/nodiratime:目录在被访问时是否更新其访问时间戳
remount:重新挂载
acl:支持使用facl功能。
[root@localhost ~]# mount -o remount,acl /dev/sdb1 /mnt/ [root@localhost ~]# mount|grep "sdb1" /dev/sdb1 on /mnt type ext4 (rw,relatime,data=ordered)
也可以tune2fs -o acl device
ro:只读
rw:读写
/dev/nodev:此设备上是否允许创建设备文件
exec/noexec:是否允许运行此设备上的程序文件
auto/noauto:
user/nouser:是否允许普通用户挂载此文件系统
suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效
defaults:Use default options: rw, suid, dev, exec, auto, nouser, and async.
c、一个使用技巧
可以实现将目录绑定至另一个目录上,作为其临时访问入口
mount --bind 源目录 目标目录
[root@localhost ~]# mount --bind /etc/ /mnt
[root@localhost /]# umount /mnt/
d、查看当前系统所有已挂载的设备
mount
cat /etc/mtab
cat /proc/mounts
e、挂载光盘
mount -r /dev/cdrom mount_point
光盘设备文件:/dev/cdrom,/dev/dvd,或/dev/sr0
f、挂载U盘
事先识别U盘的设备文件;
g、挂载本地的回环设备,未必都是iso设备
mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT
4、umount 命令
a、umount device|dir
注意:正在被进程访问到的挂载点无法被卸载
b、查看路径被哪个进程占用:
lsof MOUNT_POINT
fuser -v MOUNT_POINT
[root@localhost /]# mount /dev/sdb2 /mnt/ [root@localhost /]# cd /mnt/ [root@localhost mnt]# umount /mnt/ umount: /mnt: target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) [root@localhost mnt]# lsof /mnt/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 1301 root cwd(表示将其设置为了当前工作目录) DIR 8,18 4096 2 /mnt lsof 2467 root cwd DIR 8,18 4096 2 /mnt lsof 2468 root cwd DIR 8,18 4096 2 /mnt
[root@localhost mnt]# fuser -v /mnt/ USER PID ACCESS COMMAND /mnt: root kernel mount /mnt root 1301 ..c(表示将其设置为了当前工作目录).. bash [root@localhost mnt]# ps -aux|grep 1301 root 1301 0.0 0.1 116292 3056 pts/0 Ss 00:13 0:00 -bash root 2512 0.0 0.0 112704 972 pts/0 R+ 04:54 0:00 grep --color=auto 1301
终止所有正在访问某挂载点的进程:我们可以使用fuser -km /mnt将相应的进程干掉
[root@localhost mnt]# fuser -km /mnt /mnt: 1301c
5、交换分区
a、创建交换分区的命令:mkswap
b、启用:swapon [OPTION] [DEVICE]
-a:定义在/etc/fstab文件中的所有swap设备
c、禁用:swapoff:swapoff DEVICE
6、设定除根文件系统以外的其它文件系统都能够开机时自动挂载:/etc/fstab文件
每行定义一个要挂载的文件系统及其相关属性
6个字段:
(1)、要挂载的设备
设备文件
LABEL
UUID
伪文件系统:如sysfs,proc,tmpfs等
(2)、挂载点
swap类型的设备的挂载点为swap
(3)、文件系统类型
(4)、挂载选项
defaults:使用默认挂载选项
如果要同时指明多个挂载选项,彼此间以逗号分隔
defaults,acl,noatime,noexec
(5)、转储频率
0:从不备份
1:每天备份
2:每隔一天备份
(6)、自检次序
0:不自检
1:首先自检,通常只能是根文件系统可用1
2:次级自检
...
mount -a:可自动挂载定义在此文件中的所有支持自动挂载的设备。
二、与磁盘相关的两个命令
1、df命令 df [OPTION]... [FILE]...
a、相应选项
-l :只显示本地文件系统不显示网络文件系统
[root@localhost /]# df -l Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/centos-root 38770180 1350432 37419748 4% / devtmpfs 1007264 0 1007264 0% /dev tmpfs 1019556 0 1019556 0% /dev/shm tmpfs 1019556 9572 1009984 1% /run tmpfs 1019556 0 1019556 0% /sys/fs/cgroup /dev/sda1 1038336 135096 903240 14% /boot tmpfs 203912 0 203912 0% /run/user/0 /dev/sdb1 5126337 3599 5013785 1% /mnt
-h:人更能够读懂的显示
[root@localhost /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 37G 1.3G 36G 4% / devtmpfs 984M 0 984M 0% /dev tmpfs 996M 0 996M 0% /dev/shm tmpfs 996M 9.4M 987M 1% /run tmpfs 996M 0 996M 0% /sys/fs/cgroup /dev/sda1 1014M 132M 883M 14% /boot tmpfs 200M 0 200M 0% /run/user/0 /dev/sdb1 4.9G 3.6M 4.8G 1% /mnt
-i:查看inode使用的百分比
[root@localhost /]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/mapper/centos-root 19394560 42078 19352482 1% / devtmpfs 251816 410 251406 1% /dev tmpfs 254889 1 254888 1% /dev/shm tmpfs 254889 725 254164 1% /run tmpfs 254889 16 254873 1% /sys/fs/cgroup /dev/sda1 524288 326 523962 1% /boot tmpfs 254889 1 254888 1% /run/user/0 /dev/sdb1 327680 12 327668 1% /mnt
2、du命令 du [OPTION]... [FILE]...
-s:sumary显示目录下所有文件大小之后
-h:human-readable
三、练习
1、创建一个10G的分区,并格式化为ext4文件系统
(1)、block大小为2048;预留空间为2%,卷标为MYDATA
(2)、挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳
(3)、可开机自动挂载
2、创建一个大小为1G的swap分区,并启动之
3、创建一个20G的文件系统,块大小为2048,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/testing目录,且默认有acl挂载选项
(1)、创建20G分区
(2)、格式化:
mke2fs -t ext4 -b 2048 -L 'TEST' /dev/DEVICE
4、创建一个5G的文件系统,卷标为HUGE,要求此分区开机自动挂载至/mogdata目录,文件系统类型为ext3
5、写一个脚本,完成如下功能:
(1)、列出当前系统识别到的所有磁盘设备
fdisk -l /dev/[sh]d[a-z] |grep -o "^Disk /dev[sh]d[a-z]"
(2)、如磁盘数量为1,则显示其空间使用信息,否则则显示最后一个磁盘上的空间使用信息
disks=$(fdisk -l /dev/[sh]d[a-z] |grep -o "^Disk /dev[sh]d[a-z]"|wc -l)
if [ $disks -eq 1 ];then fdisk -l /dev/[hs]da; else fdisk -l $(fdisk -l /dev/[sh]d[a-z] |grep -o "^Disk /dev/[sh]d[a-z]" |tail -1 |cut -d' ' -f2) ;fi