文章目录
1、 MBR与磁盘分区
1.1 为什么要分区
- 优化I/O性能 读写
- 实现磁盘空间配额限制
- 提高修复速度
- 隔离系统和程序
- 安装多个OS
- 采用不同文件系统
1.2 MBR分区
MBR磁盘采用MBR分区表,由于MBR用4个字节存储分区总扇区数,最大可以表示2的32次方,一个扇区512字节,那么分区的容量或者磁盘容量都不能超过2TB。常见的硬盘可以划分为主分区、扩展分区和逻辑分区,通常情况下主分区只有四个,而
扩展分区可以看成是一个特殊的主分区类型,在扩展分区中可以建立逻辑分区。主分区一般
用来安装操作系统,扩展分区则多用来存储文件数据
MBR(主引导记录):Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
- 446bytes: boot loader 启动相关
- 64bytes:分区表,其中每16bytes标识一个分区 4 主分区 *16=64
- 2bytes: 55AA
因此总的来说,硬盘分区有 3 种,分别是主分区、扩展分区和逻辑分区。对于一个硬盘来说,主分区至少有 1 个,最多有 4 个;扩展分区可以没有,最多只能有 1 个,且主分区+扩展分区总共不能超过 4 个;逻辑分区可以有若干个。
主分区可以直接存储数据
扩展分区不可以直接存储数据,还需要再分区
1.3 GPT分区
GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z(512Byte/block )64Z ( 4096Byte/block)
使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动
2、 分区工具
lsblk 列出块设备
fdisk 管理MBR分区
gdisk 管理GPT分区
parted 高级分区操作,可以是交互或非交互方式
partprobe 重新设置内存中的内核分区表版本,适合于除了CentOS 6 以外的其它版本 5,7,8
parted 命令
注意:parted的操作都是实时生效的,小心使用
parted [选项]... [设备 [命令 [参数]...]...]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200 (默认M)
parted /dev/sdb rm 1
parted -l 列出所有硬盘分区信息
2.1 fdisk
格式:fdisk -l [磁盘设备]
fdisk [磁盘设备]
-
m 打印出菜单
-
p 打印出当前分区表
-
n 新建一个分区
-
d 删除一个分区
-
t 改变分区的属性,系统ID
-
w 保存
-
q 不保存退出
实例:
[root ~]# fdisk -l /dev/sda
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a8576
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 83886079 40893440 8e Linux LVM
Device:分区的设备文件名称。
Boot:是否是引导分区。若是,则有“*”标识。主系统
Start:该分区在硬盘中的起始位置(柱面数)。
End:该分区在硬盘中的结束位置(柱面数)。
Blocks:分区的大小,以 Blocks(块)为单位,默认的块大小为 1024 字节。
Id:分区对应的系统 ID 号。83 表示 Linux 中的 XFS 分区或 EXT4 分区、8e 表示 LVM 逻辑卷。LVM 是 Linux 操作系统中对磁盘分区进行管理的一种逻辑机制,与之相关的知识将在后面的章节介绍。
System:分区类型。识别到新的硬盘设备后,就可以在该硬盘中建立新的分区了。在 Linux 操作系统中,分区和格式化的过程是相对独立的,关
[root@localhost data]#fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):
输入 n 后
p 主分区 e扩展分区 1逻辑分区
设置分区:1(范围1-4 ,如按回车代表默认值)
设置分区大小:+20G (指定大小为20G ,回车代表默认使用全部空间)
#####创建后分区如果分区未出现可以使用 partprobe 刷新检测分区表。
2.2 blkid
可以查看块设备属性信息
[root ~]# blkid
/dev/sda1: UUID="dd924c21-db72-4fc2-bb50-a1b807e11707" TYPE="xfs"
/dev/sda2: UUID="seCmIX-Qnsm-936E-LFi7-iycT-aW69-170SMy" TYPE="LVM2_member"
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="a186c243-8403-4d1e-826a-668de463529f" TYPE="xfs"
/dev/mapper/centos-swap: UUID="ad062e10-f14a-4cd6-ae86-963bbcea5829" TYPE="swap"
2.3 mkfs
创建文件系统(格式化)常用选项
-t {ext2|ext3|ext4|xfs} 指定文件系统类型
-b {1024|2048|4096} 指定块 block 大小
-L ‘LABEL’ 设置卷标
-j 相当于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3-i
-i # 为数据空间中每多少个字节创建一个inode;不应该小于block大小
-N # 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128---4096
-m # 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] 启用指定特性-O ^FEATURE 关闭指定
[root ~]# mkfs mkfs -t ext4=mkfs.ext4
mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
#文件系统检测和修复
fsck.FS_TYPE
fsck -t FS_TYPE
-a 自动修复
-r 交互式修复错误
e2fsck:ext系列文件专用的检测修复工具
xfs_repair:xfs文件系统专用检测修复工具
[root@centos ~]#mount /dev/sdb2 /mnt
[root@centos ~]#cp /etc/fstab /mnt/f1
[root@centos ~]#cp /etc/fstab /mnt/f2
[root@centos ~]#ls /mnt
f1 f2 lost+found
[root@centos ~]#dd if=/dev/zero of=/dev/sdb2 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00128317 s, 817 MB/s
[root@centos ~]#ls /mnt
[root@centos ~]#tune2fs -l /dev/sdb2
tune2fs 1.44.6 (5-Mar-2019)
tune2fs: Bad magic number in super-block while trying to open /dev/sdb2
[root@centos ~]#df
[root@centos ~]#umount /mnt
[root@centos ~]#e2fsck /dev/sdb2
[root@centos~]#e2fsck /dev/sdb2 -y
2.4 mkswap
swap - 特殊的分区
特殊的文件系统,缓解内存不足,为了个别应为程序加内存有点浪费
添加交换分区的空间
mkswap + 分区
swapon +分区 开启 -a 全部
swapoff +分区 关闭 -a 全部
[root ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):3
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root ~]# cat /proc/meminfo |grep "SwapTo" //先查看现有交换分区容量
SwapTotal: 2097148 kB
[root ~]# mkswap /dev/sdb3
mkswap: /dev/sdb3: warning: wiping old swap signature.
正在设置交换空间版本 1,大小 = 20971516 KiB
无标签,UUID=2b417485-49bd-4b72-9fce-89594647fcd1
[root ~]# swapon /dev/sdb3
[root ~]# cat /proc/meminfo |grep "SwapT"
SwapTotal: 23068664 kB
[root ~]# swapoff /dev/sdb3
[root ~]# cat /proc/meminfo |grep "SwapT"
SwapTotal: 2097148 kB
4.5 文件系统检测和修复
fsck.FS_TYPE
fsck -t FS_TYPE
-a 自动修复
-r 交互式修复错误
e2fsck:ext系列文件专用的检测修复工具
xfs_repair:xfs文件系统专用检测修复工具
[root@centos ~]#mount /dev/sdb2 /mnt
[root@centos ~]#cp /etc/fstab /mnt/f1
[root@centos ~]#cp /etc/fstab /mnt/f2
[root@centos ~]#ls /mnt
f1 f2 lost+found
[root@centos ~]#dd if=/dev/zero of=/dev/sdb2 bs=1M count=1
#破坏文件系统
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00128317 s, 817 MB/s
[root@centos ~]#ls /mnt
[root@centos ~]#tune2fs -l /dev/sdb2
tune2fs 1.44.6 (5-Mar-2019)
tune2fs: Bad magic number in super-block while trying to open /dev/sdb2
[root@centos ~]#df
[root@centos ~]#umount /mnt
[root@centos~]#e2fsck /dev/sdb2
[root@centos~]#e2fsck /dev/sdb2 -y
3、挂载与解挂载
3.1 mount
mount [ -t 类型 ] 存储设备 挂载点目录
mount -o loop ISO镜像文件 挂载点目录
device:指明要挂载的设备
-
设备文件:例如:/dev/sda5
-
卷标:-L ‘LABEL’, 例如 -L ‘MYDATA’
-
UUID: -U ‘UUID’:例如 -U ‘0c50523c-43f1-45e7-85c0-a126711d406e’
-
伪文件系统名称:proc, sysfs, devtmpfs, configfs
mountpoint:挂载点目录必须事先存在,建议使用空目录
挂载规则
- 一个挂载点同一时间只能挂载一个设备
- 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
- 一个设备可以同时挂载到多个挂载点
- 通常挂载点一般是已存在空的目录
-t fstype 指定要挂载的设备上的文件系统类型,如:ext4,xfs
-r readonly,只读挂载
-w read and write, 读写挂载,此为默认设置,可省略
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有
auto功能)
-L 'LABEL' 以卷标指定挂载设备
-U 'UUID' 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
async 异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全
sync 同步模式,内存更改时,同时写磁盘,安全,但效率低下
atime/noatime 包含目录和文件
diratime/nodiratime 目录的访问时间戳
auto/noauto 是否支持开机自动挂载,是否支持-a选项
exec/noexec 是否支持将文件系统上运行应用程序
dev/nodev 是否支持在此文件系统上使用设备文件
suid/nosuid 是否支持suid和sgid权限
remount 重新挂载
ro/rw 只读、读写
user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
acl/noacl 启用此文件系统上的acl功能
loop 使用loop设备
_netdev 当网络可用时才对网络资源进行挂载,如:NFS文件系统
defaults 相当于rw, suid, dev, exec, auto, nouser, async
[root ~]# mount /dev/sr0 /opt
mount: /dev/sr0 写保护,将以只读方式挂载
[root ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 37G 5.7G 32G 16% /
devtmpfs 977M 0 977M 0% /dev
tmpfs 993M 0 993M 0% /dev/shm
tmpfs 993M 9.0M 984M 1% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda1 1014M 161M 854M 16% /boot
tmpfs 199M 12K 199M 1% /run/user/42
tmpfs 199M 0 199M 0% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /opt
####查看是否为挂载点
# findmnt 查看 设备的详细信息
[root@localhost opt]# findmnt /sdb1
TARGET SOURCE FSTYPE OPTIONS
/sdb1 /dev/sdb1 xfs rw,relatime,seclabel,attr2,inode64,noquota
重新挂载
#重新挂载
[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
永久挂载
需要将文件写入 /etc/fstab
使用UUID的方式挂载可以确保挂载的唯一性
[root@localhost opt]# blkid
/dev/sda1: UUID="e9364e9b-a85b-49d7-9652-3a56202e14c8" TYPE="xfs"
/dev/sda2: UUID="2b3XJj-lWF0-peVn-pI09-xRPq-RF5D-1PCWHs" TYPE="LVM2_member"
/dev/sda3: UUID="U6aPoo-6qm9-MdVr-Kdhx-ORuu-JCPK-7oRxlU" TYPE="LVM2_member"
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="a0a45ee1-62c2-4107-895a-a0ad9d01e21f" TYPE="xfs"
/dev/mapper/centos-swap: UUID="9c443edd-5cd4-4b29-8f22-d7f935eff0af" TYPE="swap"
/dev/sdb1: UUID="2a1e1ac7-7462-4fc3-b644-43813660276f" TYPE="xfs"
[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
~
:r!blkid /dev/sdb1
##使用vi编辑器功能读入UUID
[root@localhost opt]# mount -a
#####uuid写错了 可以直接等待进入系统后,出现ctrl+D 报错 输入root密码,后修改 /etc/fstab
3.2 解挂载
umount 设备名|挂载点
卸载时:可使用设备,也可以使用挂载点
fuser -v MOUNT_POINT
查看正在访问指定文件系统的进程
fuser -km MOUNT_POINT
终止所有在正访问指定的文件系统的进程
3.3 df
格式:df [OPTION] [file]
[root@centos8 ~]#df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 887M 0 887M 0% /dev
tmpfs tmpfs 903M 0 903M 0% /dev/shm
tmpfs tmpfs 903M 8.7M 894M 1% /run
tmpfs tmpfs 903M 0 903M 0% /sys/fs/cgroup
/dev/sda2 xfs 100G 2.7G 98G 3% /
/dev/sda3 xfs 50G 1.4G 49G 3% /data
/dev/sda1 ext4 976M 128M 781M 15% /boot
tmpfs tmpfs 181M 0 181M 0% /run/user/0
[root@centos8 ~]#lsblk -f
NAME FSTYPE LABEL UUID
MOUNTPOINT
sda
├─sda1 ext4 5c2216e3-ae34-444e-aa60-83cbaebb47e7
/boot
├─sda2 xfs f7f53add-b184-4ddc-8d2c-5263b84d1e15 /
├─sda3 xfs 9a2293a8-9277-4b18-bae1-498e0b9da145
/data
├─sda4
├─sda5 swap eebe3bc7-6d52-4ad9-86aa-916f1a123fd4
[SWAP]
└─sda6
sdb