捲管理:如何將空間從一個分區移動到另一個分區?
我正在設置一個 redhat ec2 實例,預設情況下,我使用的軟體(稱為qradar)在連接到該實例的兩個 500g ebs 儲存設備上創建了以下卷:
$ lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert storetmp rootrhel -wi-ao---- 20.00g varlog rootrhel -wi-ao---- <20.00g store storerhel -wi-ao---- <348.80g transient storerhel -wi-ao---- <87.20g $ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda2 500G 1.4G 499G 1% / devtmpfs 16G 0 16G 0% /dev tmpfs 16G 0 16G 0% /dev/shm tmpfs 16G 17M 16G 1% /run tmpfs 16G 0 16G 0% /sys/fs/cgroup /dev/mapper/storerhel-store 349G 33M 349G 1% /store /dev/mapper/storerhel-transient 88G 33M 88G 1% /transient /dev/mapper/rootrhel-storetmp 20G 33M 20G 1% /storetmp /dev/mapper/rootrhel-varlog 20G 35M 20G 1% /var/log tmpfs 3.2G 0 3.2G 0% /run/user/1000
我需要
storetmp
100克。如何將 80g 的儲存空間從 移動store
到storetmp
?看來我可能需要將一些空間從 xvdb3 轉移到 xvdb2:
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 500G 0 disk ├─xvda1 202:1 0 1M 0 part └─xvda2 202:2 0 500G 0 part / xvdb 202:16 0 500G 0 disk ├─xvdb1 202:17 0 24G 0 part [SWAP] ├─xvdb2 202:18 0 40G 0 part │ ├─rootrhel-varlog 253:2 0 20G 0 lvm /var/log │ └─rootrhel-storetmp 253:3 0 20G 0 lvm /storetmp └─xvdb3 202:19 0 436G 0 part ├─storerhel-store 253:0 0 348.8G 0 lvm /store └─storerhel-transient 253:1 0 87.2G 0 lvm /transient
請注意,這些目錄目前正在被盒子上執行的軟體使用,並且不是空的,所以刪除它們是不可能的,我需要即時完成:
$ ls -l /dev/mapper/storerhel-transient lrwxrwxrwx 1 root root 7 Aug 10 16:00 /dev/mapper/storerhel-transient -> ../dm-3 $ ls -l /dev/mapper/rootrhel-varlog lrwxrwxrwx 1 root root 7 Aug 10 16:00 /dev/mapper/rootrhel-varlog -> ../dm-0 $ ls -l /dev/mapper/storerhel-store lrwxrwxrwx 1 root root 7 Aug 17 04:10 /dev/mapper/storerhel-store -> ../dm-2
EC2 EBS 中額外的 80 GB 每月花費不到 12 美元。線上操作可能會花費您一個多小時的工作時間,並且如果出現問題可能會導致停機——這對您來說值多少錢?
支付一些額外的容量,將其作為第三個磁碟添加到您的實例中,將其
xvdc
初始化為 LVM PV(您甚至不必在其上放置分區表:就pvcreate /dev/xvdc
足夠了)。然後將新 PV 添加到您的rootrhel
VG (vgextend rootrhel /dev/xvdc
),現在您可以/storetmp
使用增加的容量來擴展您的 PV。lvextend -L +80G /dev/mapper/rootrhel-storetmp xfs_growfs /storetmp #or the appropriate tool for your filesystem type
解決了目前的問題後,您現在可以在合適的時間安排一些停機時間。
如果您使用的是 XFS 文件系統(如 RHEL/CentOS 7 預設情況下所做的那樣),那麼在下一次計劃停機期間,您將創建和的目前內容的 tarball
/store
,/transient
解除安裝並刪除整個storerhel
VG,將其 PV 添加xvdb3
到rootrhel
VG 和然後使用更實際的容量需求估計為文件系統/store
和文件系統重新創建 LV/transient
,並恢復 tarball 的內容。停機時間結束。現在您的
rootrhel
VG 有三個 PV:xvdb2
、xvdb3
和xvdc
, 並且有足夠的空間滿足您的需要。如果您想停止支付
xvdc
,您可以使用pvmove /dev/xvdc
自動將 VG 中的數據遷移到和/或中的xvdc
未分配空間。您可以線上執行此操作;只是不要在 I/O 工作負載高峰時這樣做,以免影響性能。然後,告訴核心該設備即將消失,然後告訴亞馬遜您不再需要您的磁碟。xvdb2``xvdb3``vgreduce rootrhel /dev/xvdc``echo 1 > /sys/block/xvdc/device/delete``xvdc``xvdc
我在使用 LVM 磁碟儲存方面擁有近 20 年的經驗(首先使用 HP-UX LVM,後來使用 Linux LVM,一旦它成熟到可以在企業環境中使用)。這些是我使用 LVM 的經驗法則:
- 當一個就足夠時,您永遠不應該創建兩個 VG。
特別是,在一個磁碟上有兩個 VG 很可能是一個會讓您頭疼的錯誤。在 VG 中重新分配磁碟容量與您的文件系統類型允許的一樣靈活;以小於一個現有 PV 的塊在 VG 之間移動容量通常不值得麻煩。
- 如果您的磁碟空間需求不確定(並且總是存在),請將您的 LV 保持在較小的一側,並保留一些未分配的空間。
只要您的 VG 有可用的未分配容量,您就可以根據需要使用一兩個快速命令線上擴展 LV 和文件系統。對於一個訓練有素的猴子初級系統管理員來說,這是一項簡單的工作。
如果 VG 中沒有未分配的容量,則獲取一個新磁碟,將其初始化為新 PV,將其添加到需要容量的 VG 中,然後像往常一樣繼續擴展。縮小文件系統更容易出錯,可能需要停機,甚至可能在不備份和重新創建更小的文件系統的情況下是不可能的,具體取決於文件系統類型。因此,您需要盡可能避免需要線上縮小文件系統的情況。
- 磁碟空間的微觀管理可能是有風險的,而且工作量很大。工作很昂貴。
好的。從技術上講,您可以在 上創建一個 80 GB 的文件
/store
,losetup
將其放入一個循環設備,然後將其製成一個 PV,您可以將其添加到您的rootrhel
VG 中……但是這樣做會導致系統很可能會進入單使用者恢復模式除非您為這些文件系統和 VG 設置了自定義的啟動腳本並在第一時間正確設置。弄錯了,下次由於任何原因重新啟動系統時,您將不得不花費一些計劃外的停機時間來進行故障排除和修復,或者更現實地從頭開始重新創建文件系統並從備份中恢復內容,因為它比嘗試排除故障更簡單這個陪審團操縱的爛攤子。
或者如果您使用
ext4
的是可以線上縮減的文件系統,您可以收縮/store
文件系統,收縮LV,使用pvmove --alloc anywhere
將可用空間合併到PV的尾部xvdb3
,收縮PV,收縮分區,執行partprobe
使更改無需重新啟動即可生效,然後創建一個新分區xvdb4
,將其初始化為新 PV 並將其添加到rootrhel
VG…但是如果你在這個序列中犯了一個錯誤,以至於你的文件系統/PV 超出了它的 LV/分區容器,並且你的文件系統被切換到只讀模式並帶有一個只能通過執行文件系統檢查來重置的錯誤標誌,導致強制計劃外停機。