Linux磁盘管理
理解题:
1.请以自己的语言解释分区、文件系统和格式化的关系
分区就是物理磁盘的逻辑划分,把一块大的磁盘划分为多个小区域,各个区域有自己的功能,互不影响
文件系统是组织和存储文件的结构,一个分区得有文件系统才能存储数据
格式化就是把磁盘初始化,使其能正常写入文件(格式化会清空磁盘,操作之前记得检查磁盘是否有文件及时移走)
2.Linux下磁盘设备命令规则是什么?
磁盘一般存放在/dev目录下,以sd(X) 命名,X一般从a开始,如sda,在进行磁盘分区后,一般在后面加数字,从1开始,如sda1
所以完整路径一般是: /dev/sda /dev/sda1 /dev/sdb
3.请描述Windows和Linux下常见的文件系统
win目前一般使用NTFS文件系统,在之前还有FAT32
Linux现在一般是用xfs文件系统,还有EXT4等
命令题:
1.查看所有磁盘的分区信息
fdisk -l 会列出所有插入磁盘,包括其分区
2.查看指定磁盘的uuid信息
blkid 指定磁盘
[root@centos7-100 dev]# blkid /dev/sda1
/dev/sda1: UUID="d58fc0e5-c385-4d4b-96fb-ea728bbb93f9" TYPE="xfs"
3.将空磁盘格式化成xfs文件系统
mkfs.xfs /dev/sdb
完成后可以使用blkid /dev/sdb查看磁盘格式
[root@centos7-100 1120]# blkid /dev/sdb
/dev/sdb: UUID="6c7586c5-aa2c-460c-b29c-ff99a8e85db6" TYPE="xfs"
df -Th (在df -h的基础上多了一列磁盘的文件类型)
[root@centos7-100 1120]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 17G 8.9G 8.2G 53% /
devtmpfs devtmpfs 475M 0 475M 0% /dev
tmpfs tmpfs 487M 0 487M 0% /dev/shm
tmpfs tmpfs 487M 7.7M 479M 2% /run
tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 133M 882M 14% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb xfs 10G 33M 10G 1% /data
4.使用dd生成2G大小的文件
[root@centos7-100 1120]# dd if=/dev/zero of=2G.txt bs=2k count=1048576(1024*1024😊)
1048576+0 records in
1048576+0 records out
2147483648 bytes (2.1 GB) copied, 13.9029 s, 154 MB/s
排错题:
1.mount挂载文件提示以下报错可能的原因是什么?如何避免?
[root@centos7-100 data]# umount /data/
umount: /data: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
1. 你现在就在要操作的目录下,即/data/,这时无法卸载指定磁盘
2. 还有可能是别的程序在使用这个目录,也会提示无法卸载
如何避免:
1. 使用ps -ef|grep 'data' 查看是否有进程在占用这个目录,如果有的话检查其作用,无用可以直接kill
2. 可以在当前目录pwd,检查自己所在路径,如果实在/data/目录下,切换目录再取消挂载
2.格式化磁盘的时候提示如下错误,可能的原因是什么?如何避免?
[root@centos7-100 ~]# mkfs.xfs /dev/sdb
mkfs.xfs: /dev/sdb appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
第一条报错提示:这个磁盘已经是xfs格式的了
第二条报错提示:假如想强制覆盖,添加 -f 参数
确定磁盘内没有内容的话
1. 可以使用mkfs.xfs -f 强制覆盖
2. 可以先取消挂载这个磁盘,在重新挂载的时候对其进行操作
操作题:
第一步:虚拟机添加2块硬盘
图片在最下方
第二步:检查磁盘是否可以识别
[root@centos7-100 ~]# cd /dev
[root@centos7-100 dev]# ll sd*
brw-rw---- 1 root disk 8, 0 Nov 20 19:00 sda
brw-rw---- 1 root disk 8, 1 Nov 20 19:00 sda1
brw-rw---- 1 root disk 8, 2 Nov 20 19:00 sda2
brw-rw---- 1 root disk 8, 16 Nov 20 19:00 sdb
brw-rw---- 1 root disk 8, 32 Nov 20 19:00 sdc
brw-rw---- 1 root disk 8, 48 Nov 20 19:00 sdd
也可以使用fdisk -l查看所有磁盘,这里只展示最新添加的c,d两块磁盘
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 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
Disk /dev/sdd: 10.7 GB, 10737418240 bytes, 20971520 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
第三步:格式化文件系统
[root@centos7-100 dev]# mkfs.xfs /dev/sdc
meta-data=/dev/sdc isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@centos7-100 dev]# mkfs.xfs /dev/sdd
(sdd与sdc类似)
第四步:临时挂载第一块磁盘到/data1 第二块磁盘到/data2
[root@centos7-100 dev]# mount /dev/sdc /data1
mount: mount point /data1 does not exist
挂载的时候,假如目录不存在不会自动创建,会报错
[root@centos7-100 dev]# mkdir /data1 /data2
[root@centos7-100 dev]# mount /dev/sdc /data1
[root@centos7-100 dev]# mount /dev/sdd /data2
第五步:查看两块磁盘挂载是否正常
[root@centos7-100 dev]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 7.9G 9.2G 47% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sdb 10G 33M 10G 1% /data
/dev/sda1 1014M 133M 882M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdc 10G 33M 10G 1% /data1
/dev/sdd 10G 33M 10G 1% /data2
最后两条就是最新挂载的磁盘
这里只想看最新的两条
使用grep查找关键字,已知sdc和sdd
[root@centos7-100 dev]# df -h|egrep -n 'sdc|sdd'
10:/dev/sdc 10G 33M 10G 1% /data1
11:/dev/sdd 10G 33M 10G 1% /data2
上面使用-n可以知道最新两条的行数,所以可以使用sed命令直接取行
[root@centos7-100 dev]# df -h|sed -n '10,11'p
/dev/sdc 10G 33M 10G 1% /data1
/dev/sdd 10G 33M 10G 1% /data2
也可以使用awk命令直接取行,或者使用正则匹配关键字
[root@centos7-100 dev]# df -h|awk 'NR>=10&&NR<=11'
[root@centos7-100 dev]# df -h|awk -e '/sdc|sdd/'
/dev/sdc 10G 33M 10G 1% /data1
/dev/sdd 10G 33M 10G 1% /data2
第六步:查看磁盘设备的UUID
[root@centos7-100 dev]# blkid
/dev/sda1: UUID="d58fc0e5-c385-4d4b-96fb-ea728bbb93f9" TYPE="xfs"
/dev/sda2: UUID="x6EozT-VffF-sZDn-pB7f-xpdX-dPhA-lzEEyf" TYPE="LVM2_member"
/dev/sdb: UUID="6c7586c5-aa2c-460c-b29c-ff99a8e85db6" TYPE="xfs"
/dev/sdc: UUID="3b6d694d-68ef-4915-9140-3a48b7b1056a" TYPE="xfs"
/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sdd: UUID="d33be68e-5ccf-405e-abae-82243b6d6405" TYPE="xfs"
/dev/mapper/centos-root: UUID="8a7686d6-4f7d-420d-bf2f-7752343a3bf1" TYPE="xfs"
/dev/mapper/centos-swap: UUID="e6ea6948-4334-4d5b-ab07-48e4fe351642" TYPE="swap"
我只想要sdX和其对应的UUID和文件类型 格式如下: sda1:d58fc0e5-c385-4d4b-96fb-ea728bbb93f9 xfs
第一想法是按列切,使用awk
[root@centos7-100 dev]# blkid|awk -F'/|:|"' '{print $3":"$5,$7}'
sda1:d58fc0e5-c385-4d4b-96fb-ea728bbb93f9 xfs
sda2:x6EozT-VffF-sZDn-pB7f-xpdX-dPhA-lzEEyf LVM2_member
sdb:6c7586c5-aa2c-460c-b29c-ff99a8e85db6 xfs
sdc:3b6d694d-68ef-4915-9140-3a48b7b1056a xfs
sr0:2018-11-25-23-54-16-00 CentOS 7 x86_64
sdd:d33be68e-5ccf-405e-abae-82243b6d6405 xfs
这里不好使用OFS来替换分隔符,因为第一个分隔符是: 第二个是空格
第七步:备份一下/etc/fstab
最简单的cp一份到别的目录
mkdir ~/fstab
cp /etc/fstab ~/fstab/
可以使用打包命令压缩到指定目录
cd ~/fstab
tar zcf fstab.tar.gz /etc/fstab
使用cat命令打印在写入
cat /etc/fstab >> fstab1
(补充)dd (不常用 比较危险)
dd if=/etc/fstab of=fstab2
[root@centos7-100 fstab]# ll
total 16
-rw-r--r-- 1 root root 559 Nov 20 19:31 fstab
-rw-r--r-- 1 root root 559 Nov 20 19:32 fstab1
-rw-r--r-- 1 root root 559 Nov 20 19:34 fstab2
-rw-r--r-- 1 root root 401 Nov 20 19:31 fstab.tar.gz
第八步:将自动挂载信息写入/etc/fstab
首先查看新加磁盘的UUID,上面已经查到了,直接拿来使用
sdc:3b6d694d-68ef-4915-9140-3a48b7b1056a xfs
sdd:d33be68e-5ccf-405e-abae-82243b6d6405 xfs
可以echo "" >> 信息到指定目录
[root@centos7-100 fstab]# echo "UUID=3b6d694d-68ef-4915-9140-3a48b7b1056a /data xfs defaults 0 0" >> /etc/fstab
[root@centos7-100 fstab]# echo "UUID=d33be68e-5ccf-405e-abae-82243b6d6405 /data xfs defaults 0 0" >> /etc/fstab
这样操作会比较危险,假如 echo ""> /etc/fstab 的话,会把源文件直接覆盖掉,只剩新加的这一条
所以建议先在外面编辑好命令,再vim编辑/etc/fstab文件写入配置
第九步:检查/etc/fstab是否可以正常挂载
先用df -h查看当前的磁盘挂载
[root@centos7-100 fstab]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 7.9G 9.2G 47% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sdb 10G 33M 10G 1% /data
/dev/sda1 1014M 133M 882M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdc 10G 33M 10G 1% /data1
/dev/sdd 10G 33M 10G 1% /data2
发现已经有sdc和sdd磁盘,所以先umount /etc/sdc,umount /etc/sdd取消挂载
使用mount -a命令,没有报错,说明配置文件没有问题
但是使用df -h查看是否挂载时,发现只有sdd被挂上去了,sdb和sdc都不见了
[root@centos7-100 fstab]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 7.9G 9.2G 47% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sdd 10G 33M 10G 1% /data
/dev/sda1 1014M 133M 882M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
经排查问题,发现挂载点重复了,sdb,sdc,sdd全部挂在/data/下了,这样只会显示最后一个,这是很严重的问题(数据覆盖,访问混乱,挂载点混乱,维护困难,不知道谁是谁)
[root@centos7-100 fstab]# cat /etc/fstab
/dev/mapper/centos-root / xfs defaults 0 0
UUID=d58fc0e5-c385-4d4b-96fb-ea728bbb93f9 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
UUID=6c7586c5-aa2c-460c-b29c-ff99a8e85db6 /data xfs defaults 0 0
UUID=3b6d694d-68ef-4915-9140-3a48b7b1056a /data xfs defaults 0 0
UUID=d33be68e-5ccf-405e-abae-82243b6d6405 /data xfs defaults 0 0
及时修改sdc的挂载点为/data1,sdd的挂载点为/data2
使用umount取消挂载时,发现无法取消,原因就是因为一个目录挂载了三个磁盘,要umount /data 三次才取消掉所有磁盘挂载。
确定没有问题后,再次使用mount -a,没有报错,使用df -h查看
[root@centos7-100 fstab]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 7.9G 9.2G 47% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 133M 882M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb 10G 33M 10G 1% /data
/dev/sdc 10G 33M 10G 1% /data1
/dev/sdd 10G 33M 10G 1% /data2
自动挂载成功,且挂到了对应的目录下
这里我想查看磁盘使用率排名,从大到小排列
取列使用awk,排序使用sort,先取对应列在排序
[root@centos7-100 fstab]# df -h |awk '{print $5, $1}' |grep -v Use% |sort -nr
47% /dev/mapper/centos-root
14% /dev/sda1
2% tmpfs
1% /dev/sdd
1% /dev/sdc
1% /dev/sdb
0% tmpfs
0% tmpfs
0% tmpfs
0% devtmpfs
第十步:使用dd命令往/data1写入1G的文件,文件名1G.txt。往/data2写入4G的文件,文件名4G.txt
[root@centos7-100 fstab]# cd /data1
[root@centos7-100 data1]# dd if=/dev/zero of=1G.txt bs=1m count=1024
dd: invalid number ‘1m’
小写的块单位会报错
[root@centos7-100 data1]# dd if=/dev/zero of=1G.txt bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 15.3325 s, 70.0 MB/s
[root@centos7-100 data1]# cd /data2
[root@centos7-100 data2]# dd if=/dev/zero of=4G.txt bs=4M count=1024
1024+0 records in
1024+0 records out
4294967296 bytes (4.3 GB) copied, 7.27795 s, 590 MB/s
发现写入的大文件反而执行的快,明显与常规不符合,经查找可能与一些磁盘写入缓存、策略有关
但是也不是绝对的,后面又做了几次实验发现写入速度差距不大
第十一步:查看磁盘分区使用率,检查刚才写入的文件是否真的写入了新添加的磁盘
[root@centos7-100 data2]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 7.9G 9.2G 47% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 133M 882M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb 10G 33M 10G 1% /data
/dev/sdc 10G 1.1G 9.0G 11% /data1
/dev/sdd 10G 4.1G 6.0G 41% /data2
sdc写入1G,sdd写入4G,没有问题
我们最后使用umount /dev/sdc umount /dev/sdd取消最后两个磁盘的挂载,并重启服务器,开机后查看是否能自动挂载
[root@centos7-100 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 7.9G 9.2G 47% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sdb 10G 33M 10G 1% /data
/dev/sdd 10G 4.1G 6.0G 41% /data2
/dev/sdc 10G 1.1G 9.0G 11% /data1
/dev/sda1 1014M 133M 882M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
自动挂载成功~👍👍👍
![image-20231120185943416](C:\Users\li_19\AppData\Roaming\Typora\typora-user-images\image-20231120185943416.png)
## 拓展题:自己尝试修复损坏的/etc/fstab文件,操作文档如下
## 1.什么是Linux单用户模式
单用户模式的最主要应用场景就是当我们忘记系统root密码的时候,就可以使用单用户模式找回。
如果谁都能随随便便的进入单用户模式修改root密码,那就风险太大了,所有单用户模式有前提条件:
1.进入单用户模式必须重启服务器,所以需要有重启服务器的权限
2.单用户模式是启动服务进程之前,所以需要有能实际接触服务器的条件才行,如果是物理机那就表示人必须在机器旁边,接键盘显示器才能操作。
## 2.实战:找回忘记的Linux密码
### 方法1: 添加rw init=/bin/bash
![image-20210406204254305](https://vim30.oss-accelerate.aliyuncs.com/img/image-20210406204254305.png)
1.开机启动时在启动菜单界面选择按e进入grup编辑模式
2.在linux开头的行最后添加以下内容
enforcing=0 init=/bin/bash
3.保存启动
ctrl + x
3.启动后重新挂载
mount -o rw,remount /
4.重新修改root密码
passwd root
5.重启进入系统
exec /sbin/init
详细步骤:
https://mp.weixin.qq.com/s/1f-zCq8j4gL3xiB3AV9K3A
方法2: 添加rd.break
![image-20210406183227356](https://vim30.oss-accelerate.aliyuncs.com/img/image-20210406183227356.png)
操作步骤如下:
1.开机启动时在启动菜单界面选择按e进入grup编辑模式
2.在linux开头的行最后添加
enforcing=0 rd.break
3.按ctrl+x保存退出重启
4.进入单用户模式后输入以下命令
mount -o remount,rw /sysroot/
chroot /sysroot/
passwd root
exit
reboot
遇到的坑: selinux没关导致修改不成功
临时关闭:
[root@centos7-100 ~]# getenforce
Enforcing
[root@centos7-100 ~]# setenforce 0
[root@centos7-100 ~]# getenforce
Permissive
永久关闭:
[root@centos7-100 ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config