1. 磁盘存储术语总结: head, track, sector, cylinder.
| 术语 | 英文 | 描述 |
|---|---|---|
| 磁头 | head | 一个盘对应一个磁头 |
| 磁道 | track | 盘面上的每一圈就算一个磁道 |
| 扇区 | sector | 把每个磁道按512bytes大小再进行划分,这就是扇区,每个磁道的扇区数量是不一样的 |
| 柱面 | cylinder | 磁头移动的时候,是一起移动的,如果是6个盘面,则6个磁头对应的磁道是一致的,这就是柱面 |
2. 总结MBR,GPT结构。
两种分区方式:MBR、GPT
MBR分区:
MBR:MasterBootRecord,1982年,使用32位表示扇区数,分区不超过2T
划分分区的单位: CentOS5 之前按整柱面划分 CentOS6版本后可以按Sector(扇区)划分
0磁道0扇区:512bytes,不给使用
446bytes:boot loader启动相关
64bytes:分区表,其中每16bytes标识一个分区
Zbytes:55AA,标识符
MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
MBR分区:主和扩展分区对应的1--4,/dev/sda3,逻辑分区从5开始,/dev/sda5
为什么不能超过4个主分区?
因为在0磁道0扇区上只留了64bytes空间存储分区表信息,而一个分区的关键信息要占用16个字节来存放
为什么单分区不能超过2T?
一个分区信息占用16个字节,其中记录分区开始位置的空间为4个字节,记录分区结束的空间也是4个字节;
一个字节8位,4个字节是32位,则起始位最小值为32个0,结束位最大值为32个1。
所以1个分区,最大就是2的32次方个扇区,一个是扇区512字节,则最大空间是2^32*2^9=2^41字节;
2^40就是T,那2^41就表示不超过2T
GPT分区
GPT支持128个分区,使用64位
使用128位UUID(Universally Unique ldentifier)表示磁盘和分区,GPT分区表自动备份在头和尾两份,并有CRC校验位
UEFl (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动
BIOS和UEFI
BIOS是固化在电脑主板上的程序,主要用于开机系统自检和引导操作系统。目前新式的电脑基本上都是 UEFI启动
BIOS(Basic Input Output System 基本输入输出系统)主要完成系统硬件自检和引导操作系统,操作系统开始启动之后,BIOS的任务就完成了。系统硬件自检: 如果系统硬件有故障,主板上的扬声器就会发出长短不同的"清潏“音,可以简单的判断硬件故障,比如”“1长1短”通常表示内存故障,"1长3短“通常 表示显卡故障
EFI(Extensible Frmware interiace)可扩展固件接口,是 intel为PC固件的体系结构、接口和服务提出的建议标准,其主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是BIOS的继任者,或者理解为新版BIOS。
UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified Efl Form的国际组织。
UEFl(Unified Extensible firmware Interface)统一的可扩展固件接口,是一种详细描述类型接口的标准,UEFI相当于一个轻量化的操作系统,提供了硬件和操作系统之间的一个接口,提供了图形化的操作界面。最关键的是引入了GPT分区表,支持2T以上的硬盘,硬盘分区不受限制
MSDN (Microsoft Developer Network)指出,Windows 只能安装于 BIOS+ MBR或是 UEF+ GPT 的组合上,而 BIOS+ GPT和 UEFI+ MBR 是不允许的,但是BIOS + GPT + GRUB 启动Linux 是可以的
3. 总结分区,文件系统管理,SWAP管理相关的命令及示例(加注释),示例 fdisk, mkfs, fsck, mount, umount, swapon, swapoff
Linux常用文件系统
| 文件系统 | 备注 |
|---|---|
| ext2 | Extended file system 适用于那些分区容量不是太大,更新也不频繁的情况,例如 /boot 分区 |
| ext3 | ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复 |
| ext4 | ext 文件系统的最新版。有很多新的特性,包括纳秒级时间戳、巨型文件(16TB)、最大1EB的文件系统,以及速度的提升 |
| xfs | SGI,支持最大8EB的文件系统 |
| swap | 交换分区专用的文件系统 |
| iso9660 | 光盘文件系统 |
| btrFS | Oracle公司开发 |
| relserFS |
分区工具fdisk
fdisk 主要支持 MBR分区表
fdisk
#常用子目录
m #查看帮助
p #输出分区列表
t #更改分区类型
n #创建新分区
d #删除分区
v #校验分区
u #转换分区
w #保存并退出
q #不保存并退出
x #高级功能(专家模式)
fdisk /dev/sdb
#创建sdb1,2为主分区,sdb3为扩展分区,567是其逻辑分区
#删除逻辑分区6,逻辑分区7会自动变成6,这是逻辑分区的特性,而删除主分区2则主分区3不会变成2。
[root@ubuntu2204 ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xba1e1547
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 18876415 8388608 4G 83 Linux
/dev/sdb3 18876416 41943039 23066624 11G 5 Extended
/dev/sdb5 18878464 23072767 4194304 2G 83 Linux
/dev/sdb6 23074816 31463423 8388608 4G 83 Linux
/dev/sdb7 31465472 41943039 10477568 5G 83 Linux
创建文件系统mkfs
mkfs
#常用选项
-t|--type=model #指定文件系统类型
-b #指定块block大小(1024|2048|4096)
-L LABEL #设置卷标
-V #显示创建过程
-j #同-t ext3
...
#创建ext4 文件系统
#mkfs.ext4 等同于 mkfs -t ext4
[root@Rocky-1 ~]# mkfs.ext4 /dev/sda1
mke2fs 1.45.6 (20-Mar-2020)
Creating filesystem with 1048576 4k blocks and 262144 inodes
Filesystem UUID: ca903aca-49d1-45b1-a019-662bafbd9a6f
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
#创建xfs 文件系统
[root@Rocky-1 ~]# mkfs.xfs /dev/sda2
meta-data=/dev/sda2 isize=512 agcount=4, agsize=327680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=1310720, 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@Rocky-1 ~]# lsblk -f /dev/sda
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 ca903aca-49d1-45b1-a019-662bafbd9a6f
└─sda2 xfs 82a1de92-7e37-4266-b688-2f4cbc52a169
#df 只能查看已挂载的设备,此处未挂载无显示
[root@Rocky-1 ~]# df -l
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 1840732 0 1840732 0% /dev
tmpfs 1860436 0 1860436 0% /dev/shm
tmpfs 1860436 9160 1851276 1% /run
tmpfs 1860436 0 1860436 0% /sys/fs/cgroup
/dev/mapper/rl-root 73364480 2897220 70467260 4% /
/dev/nvme0n1p1 1038336 203068 835268 20% /boot
/dev/mapper/rl-home 131081692 946976 130134716 1% /home
tmpfs 372084 0 372084 0% /run/user/0
文件系统检测fsck
用于检测文件系统是否有损坏和使用情况
e2fsck主要用于检查和修复ext系列文件系统
#fsck.文件系统可以指定文件系统类型
[root@ubuntu2204 ~]# fsck.
fsck.btrfs fsck.ext2 fsck.ext4 fsck.minix fsck.vfat
fsck.cramfs fsck.ext3 fsck.fat fsck.msdos fsck.xfs
`-f` 参数表示强制检查,即使文件系统被挂载也可以进行检查。
[root@ubuntu2204 ~]# fsck -f /dev/mapper/vg1-lv2
fsck from util-linux 2.37.2
e2fsck 1.46.5 (30-Dec-2021)
/dev/mapper/vg1-lv2: clean, 13/131072 files, 26158/524288 blocks
clean: 表示文件系统没有发现任何错误或损坏。
13/131072 files: 表示在文件系统中共有 13 个文件,而文件系统的总容量为 131072 个文件。
26158/524288 blocks: 表示已使用的块数为 26158,而文件系统的总块数为 524288。
挂载和卸载文件系统
挂载:将额外文件系统与根文件系统现存的目录建立起关联关系,进而使得此目录作为其他文件访问入口的行为
卸载:为解除此关联关系的过程
把设备关联挂载点:mount device mountpoint
挂载点下原有文件在挂载完成后被临时隐藏,因此,挂载点目录一般最好为空 进程正在使用中的设备无法被卸载
挂载mount
device:指明要挂载的设备
设备文件
卷标LABEL
UUID
伪文件系统名称
mountpoint:挂载点目录必须事先存在,建议使用空目录
挂载规则:
一个挂载点同一时间只能挂载一个设备
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
一个设备可以同时挂载到多个挂载点
通常挂载点一般是已存在空的目录
mount常用命令选项
-a #自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-B|--bind #绑定目录到另一个目录上
...
范例:将sda1挂载到dir1目录,并使用df命令查看
[root@Rocky-1 ~]# mkdir /dir{1,2}
[root@Rocky-1 ~]# ls /
bin boot dev dir1 dir2 etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@Rocky-1 ~]# mount /dev/sda
sda sda1 sda2
[root@Rocky-1 ~]# mount /dev/sda1 /dir1/
[root@Rocky-1 ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 1.8G 9.0M 1.8G 1% /run
tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup
/dev/mapper/rl-root 70G 2.8G 68G 4% /
/dev/nvme0n1p1 1014M 199M 816M 20% /boot
/dev/mapper/rl-home 126G 925M 125G 1% /home
tmpfs 364M 0 364M 0% /run/user/0
/dev/sda1 3.9G 24K 3.7G 1% /dir1
#-o选项指定readonly
mount --souce /dev/sda2 -o ro /dir2
卸载umount
卸载时,可用设备,也可使用挂载点
umount /dev/sda1
umount /dir1/
4. 总结raid 0, 1, 5, 10, 01的工作原理。总结各自的利用率,冗余性,性能,至少几个硬盘实现。
raid 0
以 chunk 单位,读写数据,因为读写时都可以并行处理,所以在所有的级别中,RAID0的速度是最快的。但是RAID0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失。
RAID 0的磁盘利用率为100%,最少需要2块硬盘实现。
raid 1
也称为镜像,两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘 数量的倍数,与RAID 0相同。另外写入速度有微小的降低。
RAID 0的磁盘利用率为50%,最少需要2块硬盘实现。最多可坏1个硬盘。
raid 5
多块数据盘异或运算值分布在所有盘上。
RAID 5的磁盘利用率为(N-1)/N,最少需要硬盘:3,3+。有冗余能力,最多可坏1个硬盘。
raid 10
先做RAID1再做RAID0。
RAID 10的磁盘利用率为50%,最少需要4块硬盘实现,每组镜像最多只能坏1块硬盘。
raid 01
先做RAID0再做RAID1。
RAID 01的磁盘利用率为50%,最少需要4块硬盘实现,每组镜像最多能坏2块硬盘。
5. 总结LVM的基本原理,完成实验对LVM的创建和磁盘扩容。
LVM: Logical Volume Manager 可以允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小,允许在多个物理设备间重新组织文件系统 LVM可以弹性的更改LVM的容量。
实现过程
将设备指定为物理卷 用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的 在物理卷上创建的逻辑卷,是由物理区域(PE)组成 可以在逻辑卷上创建文件系统并挂载。
物理卷->卷组->逻辑卷。
PV管理工具
将块设备创建为物理卷,本质上就是给块设备打一个标签
块设备数量和物理卷数量是对应的,有几个块设备,就可以创建几个物理卷
块设备容量大小不限,可以跨分区
显示pv信息
pvs
pvdisplay
创建pv
pvcreate /dev/DEVICE
删除pv
pvremove /dev/DEVICE
创建物理卷后查看
pvcreate /dev/sdb{1..3}
pvcreate /dev/sdc
[root@ubuntu2204 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <198.00g 99.00g
/dev/sdb1 lvm2 --- 4.00g 4.00g
/dev/sdb2 lvm2 --- 5.00g 5.00g
/dev/sdb3 lvm2 --- <11.00g <11.00g
/dev/sdc lvm2 --- 20.00g 20.00g
VG管理工具
显示卷组
vgs
vgdisplay
创建卷组
vgcreate [-s Size] vgname pv1 [pv2...]
#-s 指定PE大小,数字加单位,单位为k|K|m|M|g|G|t|T|p|P|e|E
管理卷组
vgextend vgname pv1 [ pv2...] #往卷中添加物理卷
vgreduce vgname pv1 [ pv2...] #从卷组中移除物理卷
删除卷组
删除vg之前,要先把相应的pv解除绑定(pvremove)
vgremove vgname
范例:创建vg
[root@ubuntu2204 ~]# vgcreate vg1 /dev/sdb{1,2}
Volume group "vg1" successfully created
[root@ubuntu2204 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- <198.00g 99.00g
/dev/sdb1 vg1 lvm2 a-- <4.00g <4.00g
/dev/sdb2 vg1 lvm2 a-- <5.00g <5.00g
/dev/sdb3 lvm2 --- <11.00g <11.00g
/dev/sdc lvm2 --- 20.00g 20.00g
[root@ubuntu2204 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- <198.00g 99.00g
vg1 2 0 0 wz--n- 8.99g 8.99g
范例:拓展vg
[root@ubuntu2204 ~]# vgextend vg1 /dev/sdc
Volume group "vg1" successfully extended
[root@ubuntu2204 ~]# vgdisplay
--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size <28.99 GiB
PE Size 4.00 MiB
Total PE 7421
Alloc PE / Size 0 / 0
Free PE / Size 7421 / <28.99 GiB
VG UUID PolBoB-RvPJ-wNZz-lrs6-WSuS-gCms-ta5VZm
LV管理工具
显示逻辑卷
lvs
lvdisplay
创建逻辑卷
lvcreate {-L N[mMgGtT] | -l N} -n NAME VolumeGroup
-L|--size N[mMgGtT] #指定大小
-l|--extents N #指定PE个数,也可以用百分比
-n NAME #逻辑卷名称、
扩容逻辑卷
lvextend -L +10G VolumeGroup
范例:创建lv
#从vg1创建lv1,2,3。大小为100个PE,2G,剩余可用PE的20%。lv4为指定vg的10%大小
[root@ubuntu2204 ~]# lvcreate -l 100 -n lv1 vg1
Logical volume "lv1" created.
[root@ubuntu2204 ~]# lvcreate -L 2G -n lv2 vg1
Logical volume "lv2" created.
[root@ubuntu2204 ~]# lvcreate -l 20%free -n lv3 vg1
Logical volume "lv3" created.
[root@ubuntu2204 ~]# lvcreate -l 10%VG -n lv4 vg1
Logical volume "lv4" created.
[root@ubuntu2204 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- <99.00g
lv1 vg1 -wi-a----- 400.00m
lv2 vg1 -wi-a----- 2.00g
lv3 vg1 -wi-a----- <5.32g
lv4 vg1 -wi-a----- <2.90g
[root@ubuntu2204 ~]# lvdisplay /dev/vg1/lv1
--- Logical volume ---
LV Path /dev/vg1/lv1
LV Name lv1
VG Name vg1
LV UUID woyA3s-L6IA-aLPG-s9FZ-t2Ki-z7Lh-jgkCtV
LV Write Access read/write
LV Creation host, time ubuntu2204, 2024-08-08 12:38:14 +0000
LV Status available
# open 0
LV Size 400.00 MiB
Current LE 100
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
逻辑卷的使用和硬盘分区使用一样,要先创建文件系统,再进行挂载、
[root@ubuntu2204 ~]# mkfs.ext4 /dev/vg1/lv1
扩容逻辑卷
扩展逻辑卷之前,要先保证卷组上还有空间
两步实现,先扩展逻辑卷,再扩容文件系统
#第一步实现逻辑卷的空间扩展
lvextend -L [+]N[mMgGtT] /dev/VG_NAME/LV_NAME
#第二步实现文件系统的扩展
#针对ext
resize2fs /dev/VG_NAME/LV_NAME
#针对xfs
xfs_growfs MOUNTPOINT
[root@ubuntu2204 ~]# lvextend -L 3G /dev/vg1/lv1
Size of logical volume vg1/lv1 changed from 400.00 MiB (100 extents) to 3.00 GiB (768 extents).
Logical volume vg1/lv1 successfully resized.
[root@ubuntu2204 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- <99.00g
lv1 vg1 -wi-ao---- 3.00g
lv2 vg1 -wi-a----- 2.00g
lv3 vg1 -wi-a----- <5.32g
lv4 vg1 -wi-a----- <2.90g
#没扩展文件系统还是原来的大小
[root@ubuntu2204 ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
tmpfs 388M 1.7M 386M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 97G 8.1G 84G 9% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 253M 1.6G 14% /boot
tmpfs 388M 4.0K 388M 1% /run/user/0
/dev/mapper/vg1-lv1 359M 24K 331M 1% /test1
#扩展文件系统
[root@ubuntu2204 ~]# resize2fs /dev/vg1/lv1
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/vg1/lv1 is mounted on /test1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg1/lv1 is now 786432 (4k) blocks long.
[root@ubuntu2204 ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
tmpfs 388M 1.7M 386M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 97G 8.1G 84G 9% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 253M 1.6G 14% /boot
tmpfs 388M 4.0K 388M 1% /run/user/0
/dev/mapper/vg1-lv1 2.9G 24K 2.8G 1% /test1
一步实现容量和文件系统的扩展
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME