理解inode
文件儲存在硬盤上,硬盤的最小存儲單位叫做"扇區"
Sector
,每個扇區儲存512字節
(相當於0.5KB
)
操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"block
,這種由多個扇區組成的"塊",是文件存取的最小單位。"塊"的大小,最常見的是4KB
,即連續八個sector
組成一個block
文件數據都儲存在"塊"中,必須有一個地方儲存文件的元信息,比如文件的創建者、文件的創建日期、文件的大小等等。這種儲存文件元信息的區域就叫做inode
,中文譯名為"索引節點"。
環境說明
[root@C71 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@C71 ~]# uname -a
Linux C71.wcy 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
但文件系統還有剩余空間,卻無法創建文件得時候,可能為inode
滿了,可以df -i
檢查一下
[root@C71 ~]# df -hT
文件系統 類型 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root xfs 126G 2.2G 124G 2% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 497M 179M 318M 37% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
/dev/mapper/dfi-dfi--lv ext4 4.8G 28M 4.6G 1% /dfi
[root@C71 ~]#
[root@C71 ~]# df -i
文件系統 Inode 已用(I) 可用(I) 已用(I)% 掛載點
/dev/mapper/centos-root 65800192 60438 65739754 1% /
devtmpfs 479688 364 479324 1% /dev
tmpfs 482689 1 482688 1% /dev/shm
tmpfs 482689 1232 481457 1% /run
tmpfs 482689 16 482673 1% /sys/fs/cgroup
/dev/sda1 256000 335 255665 1% /boot
tmpfs 482689 1 482688 1% /run/user/0
/dev/mapper/dfi-dfi--lv 327680 327680 0 100% /dfi
表現為
[root@C71 ~]# touch /dfi/test.txt
touch: 無法創建"/dfi/test.txt": 設備上沒有空間
更改ext4文件系統為xfs
- 因為
ext4
無法動態調整inode
空間占比,所以選擇將ext4
改為xfs
(支持動態調整inode
空間占比)
備份文件,將ext4文件系統轉為xfs
[root@C71 ~]# cp -r /dfi /backup
[root@C71 ~]# umount /dev/dfi/dfi-lv
[root@C71 ~]# df -hT
文件系統 類型 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root xfs 126G 2.4G 124G 2% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 497M 179M 318M 37% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
如果遇到卸載不掉得情況,可以fuser
強制刪除用戶關聯
[root@C71 ~]# umount /dev/dfi/dfi-lv
umount: /dfi:目標忙。
(有些情況下通過 lsof(8) 或 fuser(1) 可以
找到有關使用該設備的進程的有用信息)
[root@C71 ~]# fuser -m -k /dev/dfi/dfi-lv
/dev/dm-1: 1834c
[root@C71 ~]# umount /dev/dfi/dfi-lv
刪除lvs邏輯卷
[root@demo1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 1 0 wz--n- <25.51g 0
dfivg 1 1 0 wz--n- <5.00g 0
[root@demo1 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <25.51g
dfi-lv dfivg -wi-a----- <5.00g
[root@demo1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 centos lvm2 a-- <25.51g 0
/dev/sdb dfivg lvm2 a-- <5.00g 0
[root@demo1 ~]# vgremove dfivg
Do you really want to remove volume group "dfivg" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume dfivg/dfi-lv? [y/n]: y
Logical volume "dfi-lv" successfully removed
Volume group "dfivg" successfully removed
[root@demo1 ~]# pvremove /dev/sdb
Labels on physical volume "/dev/sdb" successfully wiped.
[root@demo1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 1 0 wz--n- <25.51g 0
[root@demo1 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <25.51g
[root@demo1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 centos lvm2 a-- <25.51g 0
重新分區,根據提示,依次輸入"mktable","gpt","y","mkpart","minio","ext4","0","100%","ignore","p","q"
[root@C71 ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable
新的磁盤標簽類型? gpt
警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
是/Yes/否/No? y
(parted)
(parted) mkpart
分區名稱? []? dfi
文件系統類型? [ext2]? ext4
起始點? 0
結束點? 100%
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放棄/Cancel? Ignore
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 標志
1 17.4kB 5369MB 5369MB dfi
(parted) q
信息: You may need to update /etc/fstab.
格式化磁盤使用make.xfs
,可加-f
參數強制格式化
[root@demo1 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=327678 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=1310711, 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@demo1 ~]# mount /dev/sdb1 /dfi/
恢復掛載后查看inode
使用情況
[root@demo1 ~]# df -i
文件系統 Inode 已用(I) 可用(I) 已用(I)% 掛載點
/dev/mapper/centos-root 13373440 384910 12988530 3% /
devtmpfs 479687 355 479332 1% /dev
tmpfs 482688 1 482687 1% /dev/shm
tmpfs 482688 1213 481475 1% /run
tmpfs 482688 16 482672 1% /sys/fs/cgroup
/dev/sda1 256000 335 255665 1% /boot
tmpfs 482688 1 482687 1% /run/user/0
/dev/sdb1 2621376 3 2621373 1% /dfi
查看/dfi
目錄inode
空間占比,可以看到占比imaxpct=25
[root@demo1 ~]# xfs_info /dfi/
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=327678 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1310711, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
動態擴容inode
xfs
文件系統動態擴容inode
空間占比為30%
(后續可以根據存儲情況調整)
[root@demo1 ~]# xfs_growfs -m 30 /dfi/
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=327678 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1310711, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
inode max percent changed from 25 to 30
查看inode
,對比之前可用2621373,增加524328個
[root@demo1 ~]# df -i
文件系統 Inode 已用(I) 可用(I) 已用(I)% 掛載點
/dev/mapper/centos-root 13373440 384910 12988530 3% /
devtmpfs 479687 355 479332 1% /dev
tmpfs 482688 1 482687 1% /dev/shm
tmpfs 482688 1222 481466 1% /run
tmpfs 482688 16 482672 1% /sys/fs/cgroup
/dev/sda1 256000 335 255665 1% /boot
tmpfs 482688 1 482687 1% /run/user/0
/dev/sdb1 3145704 3 3145701 1% /dfi
恢復備份文件
[root@demo1 ~]# cp -r /backup/ /dfi/
[root@demo1 ~]# df -i
文件系統 Inode 已用(I) 可用(I) 已用(I)% 掛載點
/dev/mapper/centos-root 13373440 385039 12988401 3% /
devtmpfs 479687 355 479332 1% /dev
tmpfs 482688 1 482687 1% /dev/shm
tmpfs 482688 1222 481466 1% /run
tmpfs 482688 16 482672 1% /sys/fs/cgroup
/dev/sda1 256000 335 255665 1% /boot
tmpfs 482688 1 482687 1% /run/user/0
/dev/sdb1 3145704 327674 2818030 11% /dfi
[root@demo1 ~]# df -i -kh /dfi/
文件系統 Inode 已用(I) 可用(I) 已用(I)% 掛載點
/dev/sdb1 3.0M 320K 2.7M 11% /dfi
恢復文件系統為LVS邏輯卷
[root@demo1 ~]# umount /dfi/
[root@demo1 ~]# df -h
文件系統 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root 26G 2.1G 24G 8% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 497M 179M 318M 37% /boot
tmpfs 378M 0 378M 0% /run/user/0
[root@demo1 ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable
新的磁盤標簽類型? gpt
警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
是/Yes/否/No? y
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 標志
(parted) q
信息: You may need to update /etc/fstab.
[root@demo1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 4G 0 part [SWAP]
└─sda3 8:3 0 25.5G 0 part
└─centos-root 253:0 0 25.5G 0 lvm /
sdb 8:16 0 5G 0 disk
[root@demo1 ~]# pvcreate /dev/sdb
Device /dev/sdb excluded by a filter.
導致問題的原因是添加的磁盤是在虛擬機中已經有了分區表,現在的虛擬機並不能識別磁盤的分區表,運行parted命令重做分區表
[root@demo1 ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel msdos
警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to
continue?
是/Yes/否/No? y
(parted) q
信息: You may need to update /etc/fstab.
[root@demo1 ~]# pvcreate /dev/sdb
WARNING: dos signature detected on /dev/sdb at offset 510. Wipe it? [y/n]: y
Wiping dos signature on /dev/sdb.
Physical volume "/dev/sdb" successfully created.
[root@demo1 ~]# vgcreate dfivg /dev/sdb
Volume group "dfivg" successfully created
[root@demo1 ~]# lvcreate -l +100%FREE -n dfi-lv dfivg
Logical volume "dfi-lv" created.
[root@demo1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 1 0 wz--n- <25.51g 0
dfivg 1 1 0 wz--n- <5.00g 0
[root@demo1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 centos lvm2 a-- <25.51g 0
/dev/sdb dfivg lvm2 a-- <5.00g 0
[root@demo1 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <25.51g
dfi-lv dfivg -wi-a----- <5.00g
[root@demo1 ~]# mkfs.xfs /dev/dfivg/dfi-lv
meta-data=/dev/dfivg/dfi-lv isize=512 agcount=4, agsize=327424 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=1309696, 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@demo1 ~]# mount /dfi/
mount: 在 /etc/fstab 中找不到 /dfi/
[root@demo1 ~]# mount /dev/dfivg/dfi-lv /dfi/
[root@demo1 ~]# df -hT
文件系統 類型 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root xfs 26G 2.1G 24G 8% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 497M 179M 318M 37% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
/dev/mapper/dfivg-dfi--lv xfs 5.0G 33M 5.0G 1% /dfi
[root@demo1 ~]# df -i
文件系統 Inode 已用(I) 可用(I) 已用(I)% 掛載點
/dev/mapper/centos-root 13373440 385042 12988398 3% /
devtmpfs 479687 356 479331 1% /dev
tmpfs 482688 1 482687 1% /dev/shm
tmpfs 482688 1226 481462 1% /run
tmpfs 482688 16 482672 1% /sys/fs/cgroup
/dev/sda1 256000 335 255665 1% /boot
tmpfs 482688 1 482687 1% /run/user/0
/dev/mapper/dfivg-dfi--lv 2619392 3 2619389 1% /dfi
[root@demo1 ~]# xfs_info /dfi/
meta-data=/dev/mapper/dfivg-dfi--lv isize=512 agcount=4, agsize=327424 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1309696, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@demo1 ~]# xfs_growfs -m 30 /dfi/
meta-data=/dev/mapper/dfivg-dfi--lv isize=512 agcount=4, agsize=327424 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1309696, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
inode max percent changed from 25 to 30
[root@demo1 ~]# xfs_info /dfi/
meta-data=/dev/mapper/dfivg-dfi--lv isize=512 agcount=4, agsize=327424 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1309696, imaxpct=30
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@demo1 ~]# df -i
文件系統 Inode 已用(I) 可用(I) 已用(I)% 掛載點
/dev/mapper/centos-root 13373440 385042 12988398 3% /
devtmpfs 479687 356 479331 1% /dev
tmpfs 482688 1 482687 1% /dev/shm
tmpfs 482688 1226 481462 1% /run
tmpfs 482688 16 482672 1% /sys/fs/cgroup
/dev/sda1 256000 335 255665 1% /boot
tmpfs 482688 1 482687 1% /run/user/0
/dev/mapper/dfivg-dfi--lv 3143264 3 3143261 1% /dfi