Linux

捲管理:如何將空間從一個分區移動到另一個分區?

  • August 19, 2018

我正在設置一個 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

我需要storetmp100克。如何將 80g 的儲存空間從 移動storestoretmp

看來我可能需要將一些空間從 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 添加到您的rootrhelVG ( 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解除安裝並刪除整個storerhelVG,將其 PV 添加xvdb3rootrhelVG 和然後使用更實際的容量需求估計為文件系統/store和文件系統重新創建 LV /transient,並恢復 tarball 的內容。停機時間結束。

現在您的rootrhelVG 有三個 PV:xvdb2xvdb3xvdc, 並且有足夠的空間滿足您的需要。

如果您想停止支付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 的文件/storelosetup將其放入一個循環設備,然後將其製成一個 PV,您可以將其添加到您的rootrhelVG 中……但是這樣做會導致系統很可能會進入單使用者恢復模式除非您為這些文件系統和 VG 設置了自定義的啟動腳本並在第一時間正確設置。

弄錯了,下次由於任何原因重新啟動系統時,您將不得不花費一些計劃外的停機時間來進行故障排除和修復,或者更現實地從頭開始重新創建文件系統並從備份中恢復內容,因為它比嘗試排除故障更簡單這個陪審團操縱的爛攤子。

或者如果您使用ext4的是可以線上縮減的文件系統,您可以收縮/store文件系統,收縮LV,使用pvmove --alloc anywhere將可用空間合併到PV的尾部xvdb3,收縮PV,收縮分區,執行partprobe使更改無需重新啟動即可生效,然後創建一個新分區xvdb4,將其初始化為新 PV 並將其添加到rootrhelVG…

但是如果你在這個序列中犯了一個錯誤,以至於你的文件系統/PV 超出了它的 LV/分區容器,並且你的文件系統被切換到只讀模式並帶有一個只能通過執行文件系統檢查來重置的錯誤標誌,導致強制計劃外停機。

引用自:https://unix.stackexchange.com/questions/462402