Linux文件系统和磁盘管理
前言
磁盘和文件系统的管理是运维人员必掌握的内容,此文对磁盘管理和文件系统做了一些了解。
一、磁盘基础
1、磁盘的物理结构
- 盘片:硬盘有多个盘片,每盘片2面
- 磁头:每面一个磁头
2、磁盘的数据结构
- 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据,硬盘的最小存储单位。
- 磁道:同一盘片不同半径的同心圆。
- 柱面:不同盘片相同半径构成的圆柱面,由同一半径圆的多个磁道组成。
3、硬盘的数据结构
- 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据,硬盘的最小存储单位。
- 磁道:同一盘片不同半径的同心圆。
- 柱面:不同盘片相同半径构成的圆柱面,由同一半径圆的多个磁道组成。
二、MBR与磁盘分区
1、为什么分区
- 优化I/O性能
- 实现磁盘空间配额限制
- 提高修复速度
- 隔离系统和程序
- 安装多个OS
- 采用不同文件系统
2、磁盘分区的结构
- 硬盘中的主分区数目只有4个。
- 主分区和扩展分区的序号限制在1~4,其中1-3是主分区,4是扩展分区。
- 扩展分区再分为逻辑分区。
- 逻辑分区的序号将始终从5开始。
3、文件系统
- 文件系统的组成
- 内核中的模块:ext4、xfs、vfat
- Linux虚拟文件系统:VFS
- 用户空间的管理工具:mkfs.xfs、 mkfs.ext4、mkfs.vfat
- XFS文件系统
- 存放文件和目录数据的分区。
- 高性能的日志型文件系统。
- CentOS7系统中默认使用的文件系统(可进行数据恢复)。
- SWAP,交换文件系统
- SWAP,交换文件系统
- linux支持的其它文件系统类型
- FAT16、FAT32、NTFS
- EXT4、JFS
常见的硬件设备在/dev目录下
[root@localhost ~]#ll /dev/sd*
brw-rw---- 1 root disk 8, 0 11月 25 14:10 /dev/sda
brw-rw---- 1 root disk 8, 1 11月 25 14:10 /dev/sda1
brw-rw---- 1 root disk 8, 2 11月 25 14:10 /dev/sda2
brw-rw---- 1 root disk 8, 16 11月 25 14:10 /dev/sdb
三、检测磁盘
1、使用badblocks检查坏道
[root@localhost ~]# fdisk -l #查看磁盘的分区信息
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0009d5e8
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 4196351 2097152 83 Linux
/dev/sda2 4196352 119556095 57679872 8e Linux LVM
磁盘 /dev/mapper/centos-root:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-swap:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
2、badblocks相关参数
语法格式
badblocks [选项] 设备
参数说明
-b:指定每个块的大小(以字节为单位),默认为1024字节。
-c:指定每次检测的块数,默认为64个块。
-e:指定要跳过的块数,以块为单位。
-f:强制执行,即使文件系统标记为只读或有错误。
-n:进行非破坏性写入测试。
-o:将结果输出到指定文件中。
-p:指定写入和读取测试的次数。
-s:显示扫描进度的百分比。
-v:显示详细的扫描进度和结果。
-w:进行破坏性写入测试。
例如:
四、分区工具并且确认新硬盘
1、fdisk——命令
- 格式:fdisk -l [磁盘设备]
或者 fdisk 查看硬盘的整体情况和分区情况
[root@localhost ~]#fdisk -l /dev/sda
磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0009d5e8
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 4196351 2097152 83 Linux
/dev/sda2 4196352 119556095 57679872 8e Linux LVM
Device:分区的设备文件名称。
Boot:是否是引导分区。若是,则有""标识。
Start:该分区在硬盘中的起始位置(柱面数)
End:该分区在硬盘中的结束位置(柱面数)。
Blocks:分区的大小,以Blocks(块)为单位,默认的块大小为1024字节
Id:分区对应的系统ID号。83表示Linux中的XFS 分区或EXT4分区、8e表示LVM逻辑卷。LVM是Linux操作系统中对磁盘分区进行管理的一种逻辑机制。
System:分区类型。识别到新的硬盘设备后,就可以在该硬盘中建立新的分区了。在Linux
操作系统中,分区和格式化的过程是相对独立的。
交互模式中的常用指令
Command (m for help) : m #输入m指令
d #删除一个分区
l #显示己知的分区类型,其中82为Linux swap分区,83为Linux分区
m #最示帮助菜单I
n #增加一个新的分区
p #显示磁盘当前的分区表
q #退出fdisk程序,不保存任何修改
s #创建一个新的空白的sun磁盘标签
t #改变一个分区的系统号码
u #改变显示记录单位
v #对磁盘分区表进行验证
w #保存修改结果并退出fdisk程序复制
a #设置可引导标记
b #修改bsd的磁盘标签
c #设置DOS操作系统兼容标记
o #创建一个新的空白的Dos分区表
x #特殊功能,不建议初学者使用
2、本地yum仓库搭建
[root@localhost ~]#mount /dev/sr0 /mnt/ #挂载
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]#df -h #查看是否已挂载
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 50G 4.2G 46G 9% /
devtmpfs 1.5G 0 1.5G 0% /dev
tmpfs 1.5G 0 1.5G 0% /dev/shm
tmpfs 1.5G 13M 1.5G 1% /run
tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/sda1 2.0G 157M 1.9G 8% /boot
tmpfs 296M 4.0K 296M 1% /run/user/42
tmpfs 296M 36K 296M 1% /run/user/0
/dev/sr0 4.2G 4.2G 0 100% /mnt
[root@localhost ~]#cd /etc/yum.repos.d/ #切换到固定目录
[root@localhost yum.repos.d]#ls
CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo
[root@localhost yum.repos.d]#mkdir bak #创建备份文件夹
[root@localhost yum.repos.d]#ls
bak CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo
[root@localhost yum.repos.d]#mv *.repo bak #移走网源,减少干扰
[root@localhost yum.repos.d]#mv bak/* . #移回网源
[root@localhost yum.repos.d]#ls
bak
[root@localhost yum.repos.d]#vi zhantai.repo #自建配置文件 本地源
[zhantai]
name=zhantai
baseurl=file:///mnt
gpgcheck=0
:ZZ #保存退出
[root@localhost yum.repos.d]#yum clean all #清缓存
已加载插件:fastestmirror, langpacks
正在清理软件源: zhantai
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
[root@localhost yum.repos.d]#yum makecache #重新建立元数据
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
zhantai | 3.6 kB 00:00:00
(1/4): zhantai/group_gz | 166 kB 00:00:00
(2/4): zhantai/filelists_db | 3.1 MB 00:00:00
(3/4): zhantai/primary_db | 3.1 MB 00:00:00
(4/4): zhantai/other_db | 1.3 MB 00:00:00
元数据缓存已建立
3、lsblk——命令
- lsblk以树形查看磁盘分区
[root@localhost ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 2G 0 part /boot
└─sda2 8:2 0 55G 0 part
├─centos-root 253:0 0 54G 0 lvm /
└─centos-swap 253:1 0 5G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
└─centos-root 253:0 0 54G 0 lvm /
sr0 11:0 1 4.2G 0 rom /run/media/root/CentOS 7 x86_64
4、blkid——命令
- 可以查看uuid和块设备属性信息
5、mkfs——命令
- 创建文件系统(格式化)常用选项
6、扩展分区的大小
7、gdisk——命令
-
用于磁盘分区
-
gdisk主要是用来划分容量大于2T的硬盘,大于2T fdisk搞不定两种类型的分区表:GPT和MBR
-
MBR不支持4T以上
五、挂载、解挂载
挂载规则
- 一个挂载点同一时间只能挂载一个设备
- 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
- 一个设备可以同时挂载到多个挂载点
- 通常挂载点一般是已存在空的目录
[root@localhost ~]#mount /dev/sr0 /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]#df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 50G 4.2G 46G 9% /
devtmpfs 1.5G 0 1.5G 0% /dev
tmpfs 1.5G 0 1.5G 0% /dev/shm
tmpfs 1.5G 12M 1.5G 1% /run
tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup
/dev/sda1 2.0G 157M 1.9G 8% /boot
tmpfs 296M 4.0K 296M 1% /run/user/42
tmpfs 296M 28K 296M 1% /run/user/0
/dev/sr0 4.2G 4.2G 0 100% /mnt
####查看是否为挂载点
# findmnt 查看 设备的详细信息
[root@localhost opt]# findmnt /sdb1
TARGET SOURCE FSTYPE OPTIONS
/sdb1 /dev/sdb1 xfs rw,relatime,seclabel,attr2,inode64,noquota
选项 | 功能 |
rw/ro | 是否对挂载的文件系统拥有读写权限,rw 为默认值,表示拥有读写权限;ro 表示只读权限。 |
async/sync | 此文件系统是否使用同步写入(sync)或异步(async)的内存机制,默认为异步 async。 |
dev/nodev | 是否允许从该文件系统的 block 文件中提取数据,为了保证数据安装,默认是 nodev。 |
auto/noauto | 是否允许此文件系统被以 mount -a 的方式进行自动挂载,默认是 auto。 |
suid/nosuid | 设定文件系统是否拥有 SetUID 和 SetGID 权限,默认是拥有。 |
exec/noexec | 设定在文件系统中是否允许执行可执行文件,默认是允许。 |
user/nouser | 设定此文件系统是否允许让普通用户使用 mount 执行实现挂载,默认是不允许(nouser),仅有 root 可以。 |
defaults | 定义默认值,相当于 rw、suid、dev、exec、auto、nouser、async 这 7 个选项。 |
remount | 重新挂载已挂载的文件系统,一般用于指定修改特殊权限。 |
####重新挂载
root@localhost data]#mount -o ro /dev/sdc1 /mnt/
[root@localhost data]#mount
/dev/sdc1 on /mnt type xfs (ro,relatime,seclabel,attr2,inode64,noquota)
#如果有人在使用 挂载文件夹 无法先解挂载再 去挂载
[root@localhost data]#mount -o remount,ro /mnt/
[root@localhost data]#fuser -v /mnt/
用户 进程号 权限 命令
/mnt: root kernel mount /mnt
root 20480 ..c.. bash
[root@localhost data]#fuser -km /mnt/
/mnt: 20480c
1、mount——挂载
格式:mount [ -t 类型] 存储设备 挂载点目录
2、umount——解挂载
卸载已挂载的文件系统
3、永久挂载
方法一:在**/etc/fstab**文件中,每一行记录对应一个分区或设备的挂载配置信息,这些信息从左到右包括六个字段使用空格或制表符分隔。
/dev/sdb2 /mnt xfs defaults 0 0
方法二:需要 将文件写入 /etc/fstab
UUID 可以确保唯一
[root@localhost ~]#blkid
/dev/sda1: UUID="8ed41bec-1329-4607-9b42-6f7b4b60816c" TYPE="xfs"
/dev/sda2: UUID="G15aII-0Yle-SYk6-q1mJ-bsHn-HZfu-GeC1Zv" TYPE="LVM2_member"
/dev/sdb1: UUID="tGm7NP-Ys8i-pm4d-1t0P-Bwdg-g5ua-TkFBN2" TYPE="LVM2_member"
/dev/sr0: UUID="2018-05-03-20-55-23-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="d2fd2b9d-612e-4e17-ab97-dc611c730a96" TYPE="xfs"
/dev/mapper/centos-swap: UUID="492e835a-762f-475b-a66c-ce4a341b1174" TYPE="swap"
/dev/mapper/zhangsan-cxk: UUID="8f7991cf-2c7c-4239-a74e-e57c6153f392" TYPE="xfs"
[root@localhost ~]#
[root@localhost opt]# vim /etc/fstab
在/etc/fstab 文件中,每一行记录对应一个分区或设备的挂载配置信息,这些信息从左到右包括六个字段(使用空格或制表符分隔),各部分的含义如下所述。
/dev/sdb1 /mnt xfs defaults 0 0
第 1 字段:设备名或设备卷标名。
第 2 字段:文件系统的挂载点目录的位置。
第 3 字段:文件系统类型,如 XFS、Swap 等。
第 4 字段:挂载参数,即mount 命令“-o”选项后可使用的参数。例如,defaults、rw、ro、noexec 分别表示默认参数、可写、只读、禁用执行程序。
第 5 字段:表示文件系统是否需要 dump 备份(dump 是一个备份工具)。一般设为 1时表示需要,设为 0 时将被 dump 忽略
第 6 字段:该数字决定在系统启动时进行磁盘检查的顺序。0 表示不进行检查,1 表示优先检查,2 表示其次检查。根分区应设为 1,其他分区设为 2。
通过在/etc/fstab 文件中添加相应的挂载配置,可以实现开机后自动挂载指定的分区。例如,执行以下操作将添加自动挂载分区/dev/sdb1的配置记录。
# /etc/fstab
# Created by anaconda on Fri Aug 6 20:57:12 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=e9364e9b-a85b-49d7-9652-3a56202e14c8 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
UUID=2a1e1ac7-7462-4fc3-b644-43813660276f /sdb1 xfs defaults 0 0
~
:wq
uuid写错了 可以直接等待进入系统后,出现ctrl+D 报错 输入root密码,后修改 /etc/fstab.
总结
管理磁盘和分区、创建文件系统、挂载、卸载文件系统。