文件系统
ext4:小文件多场景
xfs:大文件多场景
格式化文件系统
mkfs
文件是由inode和block组合而成
inode是元数据 --文件大小,文件拥有人拥有组,文件时间戳,文件指针,文件权限
删除数据的时候只是删除索引,当有新数据写入才会删除索引
block size 文件系统的最小存储单元,默认是4k
文件夹的索引存放该文件夹中所有文件名,文件索引号等信息
cp一个文件到相同分区或者不同分区inode会变
mv一个文件到相同分区inode不变,不同分区inode会变
硬链接inode一样,硬链接不能跨分区做 ln
软链接可以跨分区,因为软链接指向文件的索引 ln -s
ext4
[root@localhost ~]# tune2fs -l /dev/nvme0n2
tune2fs 1.45.6 (20-Mar-2020)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: a5d44a09-c2d1-485d-8860-de5c7bdeb30d # 唯一标识符,文件系统的唯一ID
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean #当前文件系统状态,这里显示为clean,表示文件系统没有错误
Errors behavior: Continue #错误处理策略,这里是Continue,表示在遇到错误时继续操作。
Filesystem OS type: Linux
Inode count: 3276800 #文件系统中的inode总数,inode用于存储文件的元数据。
Block count: 13107200 #文件系统中的块总数。
Reserved block count: 655360
Free blocks: 12822642 # 当前空闲的块数,表示还有多少存储空间可用
Free inodes: 3276789 # 当前空闲的inode数
First block: 0
Block size: 4096 # 每个块的大小,这里是4096字节。
Fragment size: 4096 #指的是文件系统将文件分割成更小单位的大小
Group descriptor size: 64
Reserved GDT blocks: 1024
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Thu Oct 31 17:31:00 2024 # 文件系统创建的时间。
Last mount time: n/a
Last write time: Thu Oct 31 17:31:00 2024
Mount count: 0
Maximum mount count: -1
Last checked: Thu Oct 31 17:31:00 2024
Check interval: 0 (<none>)
Lifetime writes: 4223 kB #该文件系统的写入总量,这里是4223 kB。
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256 #inode大小
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: d6a3db67-2a22-45e7-8209-6bb7091272b8
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0xea33d108
-b block-size
指定块的大小(以字节为单位)。有效的块大小值为1024、2048和4096字节
xfs
[root@localhost ~]# xfs_info /dev/nvme0n2
meta-data=/dev/nvme0n2 isize=512 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
isize: inode的大小(通常为512字节)。
bsize: 块的大小(4096字节)。
blocks: 数据块的总数。
imaxpct: inode的最大百分比(这里是25%)。
-b
默认值为4096字节(4 KiB),最小为512字节,最大为65536字节(64 KiB)。
查看文件夹大小
du -sh查看的是占用块文件大小
ls -lh查看的是文件实际大小
[root@localhost ~]# ls -lha /data/|head -2
total 96K
#ls -lha /data/ 显示的 total 96K 是 /data 目录下所有文件和目录的总块数(以KB为单位)。这个大小包括了文件系统块的分配情况,而不是文件的实际内容大小
dr-xr-xr-x. 24 root root 4.0K Oct 29 10:14 .
[root@localhost ~]# ls -lh /data/|head -2
total 24K
#ls -lh 命令可以查看当前目录下的文件和目录的详细信息,包括它们的大小。
drwxr-xr-x. 6 root root 54 Oct 29 14:12 backup
[root@localhost ~]# du -sh /data/|head -2
18M /data/
#这个看的是占用快大小
[root@localhost ~]# du -sh --apparent-size /data/|head -2
16M /data/
#du -sh --apparent-size /data 显示的 16M 是 /data 目录下所有文件的实际内容大小。这意味着文件的字节数加在一起的结果,而不考虑它们在磁盘上实际占用的空间。
磁盘分区方案
1.MBR
单块硬盘不得超过2TB,超过的系统不识别
一块硬盘只能创建4个主分区,多出的创建扩展分区,扩展分区要使用剩下的全部空间。
使用fdisk
2.GPT
超过2TB的使用gpt,使用gdisk
硬盘分区
fdisk分区
[root@web01 tmp]# fdisk /dev/nvme0n2
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
The old xfs signature will be removed by a write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x319b0219.
Command (m for help):
Command (m for help): p #按p打印分区表
Disk /dev/nvme0n2: 50 GiB, 53687091200 bytes, 104857600 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
Disklabel type: dos
Disk identifier: 0x319b0219
Command (m for help): n #按n新建分区
Partition type
p primary (0 primary, 0 extended, 4 free) #主分区
e extended (container for logical partitions) #扩展分区
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-104857599, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-104857599, default 104857599): +10g #分10g给第一个分区
Created a new partition 1 of type 'Linux' and of size 10 GiB.
Command (m for help): p
Disk /dev/nvme0n2: 50 GiB, 53687091200 bytes, 104857600 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
Disklabel type: dos
Disk identifier: 0x319b0219
Device Boot Start End Sectors Size Id Type
/dev/nvme0n2p1 2048 20973567 20971520 10G 83 Linux #这里看到成功了
Command (m for help): w #保存并退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
如果是centos7
分区后需要执行 partprobe
2.格式化
mkfs.ext4 /dev/sdb
3.挂载
[root@web01 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Oct 30 13:52:18 2024
#
# 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID=255cf4af-0510-4f44-9b61-a05194f5a781 /boot xfs defaults 0 0
/dev/mapper/cl-home /home xfs defaults 0 0
/dev/mapper/cl-swap none swap defaults 0 0
/dev/sr0 /var/www/html/dvd iso9660 defaults 0 0
写入配置文件后执行mount -a
脚本分区
parted
#!/bin/bash
# 设置要分区的磁盘
DISK="/dev/sdX"
# 创建分区
parted $DISK --script mklabel gpt
# 创建分区
parted $DISK --script mkpart primary 1MiB 50GiB
parted $DISK --script mkpart primary 50GiB 100GiB
parted $DISK --script mkpart primary 100GiB 100%
# 格式化分区
mkfs.ext4 ${DISK}1
mkfs.ext4 ${DISK}2
mkfs.ext4 ${DISK}3
# 打印分区表
parted $DISK print
--script 选项在使用 parted 时表示以非交互模式运行命令
卸载不掉磁盘解决办法
[root@web01 tmp]# umount /var/www/html/dvd
umount: /var/www/html/dvd: target is busy.
[root@web01 tmp]# fuser -v /var/www/html/dvd 查看访问文件系统的进程
USER PID ACCESS COMMAND
/var/www/html/dvd: root kernel mount /var/www/html/dvd
root 62172 ..c.. bash
1.结束62172进程
2.fuser -km /var/www/html/dvd 结束所有访问这个文件夹的用户
还有一种情况是文件夹里面有文件被用作swap分区
拉伸文件系统
sdb 8:16 0 3T 0 disk
└─sdb1 8:17 0 10G 0 part /root/text
第一种方法
[root@web01 ~]# gdisk /dev/sdb
Command (? for help): d #先删除这个分区
Using 1
Command (? for help): p #打印确保删除
Disk /dev/sdb: 6291456000 sectors, 2.9 TiB
Number Start (sector) End (sector) Size Code Name
Command (? for help): n #新建分区
Partition number (1-128, default 1):
First sector (34-6291455966, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-6291455966, default = 6291455966) or {+-}size{KMGTP}: +20G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): p # 打印分区发现变成20g
Number Start (sector) End (sector) Size Code Name
1 2048 41945087 20.0 GiB 8300 Linux filesystem
Command (? for help): w #保存退出
[root@web01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─cl-root 253:0 0 63.9G 0 lvm /
├─cl-swap 253:1 0 4G 0 lvm [SWAP]
└─cl-home 253:2 0 31.2G 0 lvm /home
sdb 8:16 0 3T 0 disk
└─sdb1 8:17 0 10G 0 part /root/text #发现还是10g
[root@web01 ~]# partprobe /dev/sdb partprobe 命令的作用就是强制操作系统重新加载分区表,以便让新的分区结构或调整生效。
[root@web01 ~]# resize2fs /dev/sdb1 拉伸文件系统
resize2fs 1.45.6 (20-Mar-2020)
Filesystem at /dev/sdb1 is mounted on /root/text; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/sdb1 is now 5242880 (4k) blocks long.
[root@web01 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs tmpfs 1.9G 11M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 64G 5.4G 59G 9% /
tmpfs tmpfs 371M 24K 371M 1% /run/user/976
tmpfs tmpfs 371M 0 371M 0% /run/user/0
/dev/sda1 xfs 1014M 242M 773M 24% /boot
/dev/mapper/cl-home xfs 32G 255M 31G 1% /home
/dev/sr0 iso9660 9.3G 9.3G 0 100% /var/www/html/dvd
/dev/sdb1 ext4 20G 44M 19G 1% /root/text #发现变成20g
如果是xfs使用 xfs_growfs
只能拉伸最后一个分区
第二种方法
growpart
sdb 8:16 0 3T 0 disk
└─sdb1 8:17 0 20G 0 part /root/text
[root@web01 ~]# growpart /dev/sdb 1 代表拉伸sdb第一个分区,占用sdb所有空间
CHANGED: partition=1 start=2048 old: size=41943040 end=41945088 new: size=6291453919 end=6291455967
sdb 8:16 0 3T 0 disk
└─sdb1 8:17 0 3T 0 part /root/text
swap交换分区
[root@web01 ~]# free -m
total used free shared buff/cache available
Mem: 3709 1076 730 26 1903 2336
Swap: 4031 0 4031
swap为硬盘中的容量临时作为内存来使用防止机器内存爆满而死机
[root@web01 ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 4128764 0 -2
Number Start (sector) End (sector) Size Code Name
1 2048 4196351 2.0 GiB 8300 Linux filesystem
Command (? for help): t #修改分区类型
Using 1
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200 #修改为linux swap
Changed type of partition to 'Linux swap'
Number Start (sector) End (sector) Size Code Name
1 2048 4196351 2.0 GiB 8200 Linux swap
Command (? for help): w
[root@web01 ~]# mkswap /dev/sdb1 将sdb1格式化为swap
mkswap: /dev/sdb1: warning: wiping old ext4 signature.
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=2b1377ce-30e1-48ae-8b7c-04c21f51962c
[root@web01 ~]# cat /etc/fstab |grep swap 写入配置文件
/dev/mapper/cl-swap none swap defaults 0 0
/dev/sdb1 none swap defaults 0 0
root@web01 ~]# swapon -a 挂载
[root@web01 ~]# free -m
total used free shared buff/cache available
Mem: 3709 1078 740 26 1890 2334
Swap: 6079 0 6079
如果分区分完了,可以将文件拿来做swap
[root@web01 ~]# dd if=/dev/zero of=/root/text/1 bs=1M count=512 创建一个512m的文件
[root@web01 ~]# mkswap /root/text/1 将文件格式化为swap
mkswap: /root/text/1: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 512 MiB (536866816 bytes)
no label, UUID=a6c9ca20-32ea-40df-bbc3-c197e403ca6c
[root@web01 ~]# swapon /root/text/1 临时挂载
swapon: /root/text/1: insecure permissions 0644, 0600 suggested.
[root@web01 ~]# free -m
total used free shared buff/cache available
Mem: 3709 1075 230 26 2403 2336
Swap: 4543 0 4543 swap空间变大了
[root@web01 ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 4128764 0 -2 #swap优先级,数字越高优先级越高
修复损坏磁盘
文件的元数据(Metadata)
元数据通常存储在inode(索引节点)中。
文件的元数据是描述文件本身的辅助信息,而不包含文件的实际内容。它们通常包括以下内容:
文件名(File Name):文件的名称。
文件大小(File Size):文件内容的大小,通常以字节为单位。
文件类型(File Type):文件是普通文件、目录、符号链接还是设备文件等。
权限(Permissions):文件的访问权限,指定谁可以读取、写入或执行文件。通常包含读、写、执行权限。
所有者(Owner):文件的拥有者,通常是用户ID(UID)。
组(Group):文件所属的用户组,通常是组ID(GID)。
时间戳(Timestamps):文件的创建时间、最后访问时间和最后修改时间。
文件状态(File State):文件是否被锁定、是否为只读等状态信息。
链接计数(Link Count):文件的硬链接数,表示有多少不同路径指向同一文件内容。
索引节点(Inode):在类Unix文件系统中,文件元数据通常保存在一个称为“inode”的结构中,它存储了文件的所有元数据(除了文件名以外)。
在类Unix系统中,所有的文件元数据(除了文件名)都存储在 inode 中。inode中记录了文件的存储位置、大小、权限、所有者、时间戳等信息。
文件系统的超级块(Superblock)
通常位于磁盘的文件系统头部
超级块通常包含以下内容:
文件系统的大小(Filesystem Size):整个文件系统的大小,通常是以块(block)为单位。
块大小(Block Size):文件系统使用的基本存储单元的大小,通常是512字节、1024字节、2048字节或4096字节。
空闲块数(Free Blocks):文件系统中当前剩余的空闲块数量。
空闲inode数(Free Inodes):文件系统中当前剩余的空闲inode数量。
块位图(Block Bitmap):标记哪些块是空闲的,哪些块已经被使用。
inode位图(Inode Bitmap):标记哪些inode是空闲的,哪些inode已经被分配给文件。
文件系统的状态(Filesystem State):文件系统的健康状态,例如是否有错误,是否需要修复等。
创建时间(Creation Time):文件系统创建的时间戳。
文件系统版本(Filesystem Version):文件系统的版本号。
挂载点(Mount Point):文件系统的挂载点路径。
块大小、块数目等其他文件系统的特性:这些信息有助于文件系统管理器(如Linux的ext4或XFS文件系统)对整个文件系统进行优化。
存储单位 大小范围 说明
扇区(Sector) 512 字节 或 4KB(4096字节) 硬盘和SSD的最小物理存储单位
文件系统块(Block) 512字节、1KB、2KB、4KB、8KB、16KB、64KB等 文件系统的最小逻辑存储单位,通常为4KB
磁盘页(Page) 通常为4KB或8KB 操作系统和数据库中用于内存管理的基本单位
页组(Page Group) 通常为4KB或8KB 某些文件系统中的大块管理单位
硬盘头部信息 MBR = 512byte==引导程序 + 16*4 分区表 + 结束位
扇区(Sector):硬盘或固态硬盘的最小物理存储单元,通常为 512字节 或 4KB。
块(Block):文件系统的最小逻辑存储单位,通常为 4KB,但也可以是 1KB、2KB、8KB 等,具体取决于文件系统的设计。
模拟文件系统损坏
[root@web01 ~]# dd if=/dev/zero of=/dev/sdb1 bs=1k count=4
4+0 records in
4+0 records out
4096 bytes (4.1 kB, 4.0 KiB) copied, 0.00048365 s, 8.5 MB/s
[root@web01 ~]# mount /dev/sdb1 /root/text/
mount: /root/text: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error.
[root@web01 ~]# fsck -y /dev/sdb1
[root@web01 ~]# mount /dev/sdb1 /root/text/
[root@web01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─cl-root 253:0 0 63.9G 0 lvm /
├─cl-swap 253:1 0 4G 0 lvm [SWAP]
└─cl-home 253:2 0 31.2G 0 lvm /home
sdb 8:16 0 3T 0 disk
└─sdb1 8:17 0 2G 0 part /root/text
如果[root@web01 ~]# fsck -y /dev/sdb1修复不好
ext4系统可以使用 e2fsck -b 163840 -y /dev/sdb1
xfs系统使用 xfs_repair /dev/sdb1
lvm
lv:逻辑卷 lv不能跨vg扩容 格式化lv后才能挂载
lvcreate创建
lvdisplay查看
vg:卷组
vgcreate创建
vgdisplay查看
vgdisplay -v vg0 查看vg具体信息
pv:物理卷
pvcreate 创建pv
pvdisplay查看pv
物理设备:block设备,分区,硬盘。raid阵列
创建逻辑卷
1.分区,转换类型为8e
分区后转换类型:
Command (? for help): t
Partition number (1-4): 3
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8e00 lvm类型
Changed type of partition to 'Linux LVM'
Number Start (sector) End (sector) Size Code Name
1 2048 4196351 2.0 GiB 8200 Linux swap
2 4196352 25167871 10.0 GiB 8E00 Linux LVM
3 25167872 46139391 10.0 GiB 8E00 Linux LVM
4 46139392 67110911 10.0 GiB 8300 Linux LVM
2.转换为pv
[root@web01 ~]# pvcreate /dev/sdb2 /dev/sdb3
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdb3" successfully created.
"/dev/sdb2" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb2
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID Hvs35Y-Gmi4-wyG1-labT-n2H6-rGbn-C1wR2g
"/dev/sdb3" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb3
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID kVFTpa-qZZM-K9Zi-pQ23-ShwU-8Ash-3e0IzZ
3.创建vg
root@web01 ~]# vgcreate vg0 /dev/sdb3 /dev/sdb2
Volume group "vg0" successfully created
[root@web01 ~]# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 19.99 GiB
PE Size 4.00 MiB #vg的最小单元 可以在创建vg时修改 vgcreate -s 8M vg0 /dev/sdb
Total PE 5118
Alloc PE / Size 0 / 0
Free PE / Size 5118 / 19.99 GiB
VG UUID geGK6F-dKvy-TY1h-tSF0-IqZI-pSFK-arEZhM
4.创建LV
[root@web01 ~]# lvcreate -L 4g -n data vg0 L 指定大小
[root@web01 ~]# lvcreate -L 4g -n data vg0 /dev/sdb2 指定从哪个设备上分
[root@web01 ~]# lvcreate -l 500 -n data vg0 l指定pe数量
Logical volume "data" created.
[root@web01 ~]# lvdisplay
--- Logical volume ---
LV Path /dev/vg0/data
LV Name data
VG Name vg0
LV UUID qZBRWG-K0fg-7JQb-0ybu-RfWi-WJO5-K7enuN
LV Write Access read/write
LV Creation host, time web01, 2024-11-07 17:54:35 +0800
LV Status available
# open 0
LV Size 4.00 GiB
Current LE 1024
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
5.格式化
[root@web01 ~]#mkfs.ext4 /dev/vg0/data
[root@web01 ~]# ll /dev/mapper/vg0-data
lrwxrwxrwx 1 root root 7 Nov 7 18:02 /dev/mapper/vg0-data -> ../dm-3
[root@web01 ~]# ll /dev/vg0/data
lrwxrwxrwx 1 root root 7 Nov 7 18:02 /dev/vg0/data -> ../dm-3
扩容逻辑卷
1.先创建pv
[root@web01 ~]# pvcreate /dev/sdb4
2.扩容vg
[root@web01 ~]# vgextend vg0 /dev/sdb4
Volume group "vg0" successfully extended
[root@web01 ~]# vgdisplay vg0
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 3
Act PV 3
VG Size <29.99 GiB
PE Size 4.00 MiB
Total PE 7677
Alloc PE / Size 1024 / 4.00 GiB
Free PE / Size 6653 / <25.99 GiB
VG UUID geGK6F-dKvy-TY1h-tSF0-IqZI-pSFK-arEZhM
3.扩容lv
[root@web01 ~]# lvextend -L +10g /dev/vg0/data
Size of logical volume vg0/data changed from 4.00 GiB (1024 extents) to 14.00 GiB (3584 extents).
Logical volume vg0/data successfully resized.
[root@web01 ~]# lvdisplay /dev/vg0/data
--- Logical volume ---
LV Path /dev/vg0/data
LV Name data
VG Name vg0
LV UUID qZBRWG-K0fg-7JQb-0ybu-RfWi-WJO5-K7enuN
LV Write Access read/write
LV Creation host, time web01, 2024-11-07 17:54:35 +0800
LV Status available
# open 1
LV Size 14.00 GiB
Current LE 3584
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
4.拉伸文件系统
[root@web01 ~]# resize2fs /dev/vg0/data
resize2fs 1.45.6 (20-Mar-2020)
Filesystem at /dev/vg0/data is mounted on /root/text; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/vg0/data is now 3670016 (4k) blocks long.
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 19M 1.8G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/cl-root 64G 5.9G 59G 10% /
/dev/sr0 9.3G 9.3G 0 100% /var/www/html/dvd
/dev/mapper/cl-home 32G 255M 31G 1% /home
/dev/sda1 1014M 242M 773M 24% /boot
tmpfs 371M 24K 371M 1% /run/user/976
tmpfs 371M 0 371M 0% /run/user/0
/dev/mapper/vg0-data 14G 20M 14G 1% /root/text
缩小文件系统(停业务)
[root@web01 ~]# umount /root/text
[root@web01 ~]# resize2fs /dev/vg0/data 10g 不能直接缩,需要先扫描卷
resize2fs 1.45.6 (20-Mar-2020)
Please run 'e2fsck -f /dev/vg0/data' first. 提示必须扫描磁盘后才能扩容
[root@web01 ~]# e2fsck -f /dev/vg0/data
e2fsck 1.45.6 (20-Mar-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg0/data: 11/917504 files (0.0% non-contiguous), 79088/3670016 blocks
1.缩小文件系统
[root@web01 ~]# resize2fs /dev/vg0/data 10G
resize2fs 1.45.6 (20-Mar-2020)
Resizing the filesystem on /dev/vg0/data to 2621440 (4k) blocks.
The filesystem on /dev/vg0/data is now 2621440 (4k) blocks long.
2.缩小逻辑卷
[root@web01 ~]# lvreduce -L 10g /dev/vg0/data
WARNING: Reducing active logical volume to 10.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/data? [y/n]: y
Size of logical volume vg0/data changed from 14.00 GiB (3584 extents) to 10.00 GiB (2560 extents).
Logical volume vg0/data successfully resized.
删除逻辑卷
1.删除和缩小LV VG PV
[root@web01 ~]# lvremove /dev/vg0/data
Do you really want to remove active logical volume vg0/data? [y/n]: y
Logical volume "data" successfully removed
2.迁移pv
#将sdb3的数据迁移到sdb4 不需要停业务
[root@web01 ~]# pvmove /dev/sdb3 /dev/sdb4
/dev/sdb3: Moved: 0.31%
/dev/sdb3: Moved: 100.00%
#此时可以将sdb3 迁移走了
[root@web01 ~]# vgreduce vg0 /dev/sdb3
Removed "/dev/sdb3" from volume group "vg0"
[root@web01 ~]# pvremove /dev/sdb3
Labels on physical volume "/dev/sdb3" successfully wiped.
逻辑卷迁移
1.先扫描逻辑卷
[root@web01 ~]# lvscan
ACTIVE '/dev/vg0/data' [10.00 GiB] inherit
ACTIVE '/dev/cl/swap' [<3.94 GiB] inherit
ACTIVE '/dev/cl/home' [31.18 GiB] inherit
ACTIVE '/dev/cl/root' [<63.88 GiB] inherit
[root@web01 ~]# vgscan
Found volume group "vg0" using metadata type lvm2
Found volume group "cl" using metadata type lvm2
[root@web01 ~]# pvscan
PV /dev/sdb2 VG vg0 lvm2 [<10.00 GiB / 9.99 GiB free]
PV /dev/sdb4 VG vg0 lvm2 [<10.00 GiB / 0 free]
PV /dev/sda2 VG cl lvm2 [<99.00 GiB / 0 free]
Total: 3 [<118.99 GiB] / in use: 3 [<118.99 GiB] / in no VG: 0 [0 ]
2.卸载后将卷组设置为不活动状态
[root@web01 ~]# lvchange -a n /dev/vg0/data 将lv卷设置为非活动状态
[root@web01 ~]# lvscan
inactive '/dev/vg0/data' [10.00 GiB] inherit
##还可以修改pv和vg属性:
#pvchange -x n device pv不可分配
#vgchange -ay vg0 激活卷组
#vgchange -an vg0 禁用卷组
3.导出逻辑卷
[root@web01 ~]# vgexport vg0
Volume group "vg0" successfully exported
[root@web01 ~]# vgdisplay vg0
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status exported/resizable 导出状态
4.关机
5.登录第二台虚机
[root@backup ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 3T 0 disk
└─sda1 8:1 0 20G 0 part
6.扫描
[root@backup ~]# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status exported/resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <20.00 GiB
PE Size 4.00 MiB
Total PE 5119
Alloc PE / Size 5119 / <20.00 GiB
Free PE / Size 0 / 0
VG UUID RQtROs-PSDN-dQz7-il3g-mXVy-k6TH-f0cUT2
7.导入vg
[root@backup ~]# vgimport vg0
Volume group "vg0" successfully imported
[root@backup ~]# lvdisplay
8.激活vg
[root@backup ~]# vgchange -ay vg0
1 logical volume(s) in volume group "vg0" now active
9.挂载
[root@backup ~]# mkdir 1
[root@backup ~]# mount /dev/vg0/data 1
[root@backup ~]# cd 1
[root@backup 1]# ls
boot lost+found run var #有数据
[root@backup 1]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.8G 0 1.8G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.7M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/cl-root 64G 4.8G 60G 8% /
/dev/mapper/cl-home 32G 268M 31G 1% /home
/dev/nvme0n1p1 1014M 242M 773M 24% /boot
tmpfs 371M 1.2M 370M 1% /run/user/42
tmpfs 371M 0 371M 0% /run/user/0
/dev/mapper/vg0-data 20G 525M 19G 3% /root/1
逻辑卷回滚
[root@web01 lvm]# mount /dev/vg0/data /root/text/ 逻辑卷坏了,无法挂载
mount: /root/text: wrong fs type, bad option, bad superblock on /dev/mapper/vg0-data, missing codepage or helper program, or other error.
[root@web01 archive]# pwd
/etc/lvm/archive 进入这个目录查看备份的vg
[root@web01 archive]# ll
total 52
-rw-------. 1 root root 2148 Nov 5 15:31 cl_00000-1019307375.vg
-rw------- 1 root root 1111 Nov 7 11:15 vg0_00000-772498167.vg
-rw------- 1 root root 1105 Nov 7 17:54 vg0_00001-532888989.vg
-rw------- 1 root root 1515 Nov 7 18:12 vg0_00002-160824709.vg
-rw------- 1 root root 1760 Nov 7 18:18 vg0_00003-1368188228.vg
-rw------- 1 root root 1941 Nov 8 11:04 vg0_00004-574781182.vg
-rw------- 1 root root 1925 Nov 8 11:10 vg0_00005-1309110768.vg
-rw------- 1 root root 1343 Nov 8 11:13 vg0_00006-278585548.vg
-rw------- 1 root root 1929 Nov 8 11:19 vg0_00007-613251119.vg
-rw------- 1 root root 1926 Nov 8 11:23 vg0_00008-1782031460.vg
-rw------- 1 root root 1690 Nov 8 14:45 vg0_00009-522694912.vg
-rw------- 1 root root 1677 Nov 8 14:46 vg0_00010-564514364.vg
-rw------- 1 root root 1695 Nov 8 15:18 vg0_00011-1825926707.vg
[root@web01 archive]# vgcfgrestore -l vg0 查看vg状态
File: /etc/lvm/archive/vg0_00000-772498167.vg
VG name: vg0
Description: Created *before* executing 'vgcreate vg0 /dev/sdb3 /dev/sdb2'
Backup Time: Thu Nov 7 11:15:14 2024
1.将lv变为非活动状态
[root@web01 archive]# lvdisplay
--- Logical volume ---
LV Path /dev/vg0/data
LV Name data
VG Name vg0
LV UUID 63UAIZ-ni8d-BuuM-Lcjy-JDUv-pIz3-ayFQka
LV Write Access read/write
LV Creation host, time web01, 2024-11-08 11:13:51 +0800
LV Status NOT available
LV Size 5.00 GiB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
[root@web01 archive]# vgcfgrestore -f /etc/lvm/archive/vg0_00011-1825926707.vg vg0
Restored volume group vg0.
[root@web01 archive]# lvchange -ay /dev/vg0/data
[root@web01 archive]# mount /dev/vg0/data /root/text/
逻辑卷快照技术
COW ---lvm的快照
写时复制
新数据写在本机 --- 写性能差
ROW ---云平台的快照
写时重定向
新数据写在快照中 ---读性能差
lvcreate -L 128M -s -n snap1 /dev/vg0/data 创建一个128m快照名字为snap1
[root@web01 ~]# vim /etc/lvm/lvm.conf
下面的配置文件用来修改快照自动扩容
snapshot_autoextend_threshold = 70 到百分之70
# Configuration option activation/snapshot_autoextend_percent.
# Auto-extending a snapshot adds this percent extra space.
# The amount of additional space added to a snapshot is this
# percent of its current size.
#
# Example
# Using 70% autoextend threshold and 20% autoextend size, when a 1G
# snapshot exceeds 700M, it is extended to 1.2G, and when it exceeds
# 840M, it is extended to 1.44G:
# snapshot_autoextend_percent = 20
snapshot_autoextend_percent = 20 扩容百分之20
还原快照
[root@web01 ~]# lvconvert --merge /dev/vg0/snap1
Merging of volume vg0/snap1 started.
vg0/data: Merged: 100.00%
逻辑卷镜像技术
#创建逻辑卷的镜像卷(原来的逻辑卷已存在)
[root@web01 ~]# lvconvert -m 1 /dev/vg0/data /dev/sdb4
Are you sure you want to convert linear LV vg0/data to raid1 with 2 images enhancing resilience? [y/n]: y
Logical volume vg0/data successfully converted.
#新建逻辑卷时创建镜像卷
[root@web01 ~]# lvcreate -m 1 -n lv01 -L 1g vg0
Logical volume "lv01" created.
#查看状态
[root@web01 ~]# lvs -a -o +seg_pe_ranges --segments 查看所有
[root@web01 ~]# lvs -a -o +devices 查看设备
#迁移案例
[root@web01 ~]# lvconvert -m0 /dev/vg0/lv01 /dev/sdb2 将lv01的数据从sdb2移出
[root@web01 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sdb2
VG Name vg0
PV Size 10.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 2559
Free PE 2559 #确保sdb2无数据了
Allocated PE 0
PV UUID Hvs35Y-Gmi4-wyG1-labT-n2H6-rGbn-C1wR2g
[root@web01 ~]# vgreduce vg0 /dev/sdb2 将sdb2移出vg
[root@web01 ~]# pvremove /dev/sdb2 移出pv
Labels on physical volume "/dev/sdb2" successfully wiped.
现在可以拆除存储
标签:管理,vg0,文件系统,dev,data,web01,磁盘,root
From: https://www.cnblogs.com/cloudwangsa/p/18563741