我原始的VM檔太大用不到,造成空間浪費。只有40GB,現在想要瘦身,經由設定完成。
此篇不是教學,而是記錄文。
修改LINUX的容量配置
容量配置現況
# df -h
檔案系統 容量 已用 可用 已用% 掛載點
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 193M 1.7G 11% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 7.2G 43G 15% / <== / 切了50G,實際使用7.2G,很浪費
/dev/sda1 497M 261M 237M 53% /boot
/dev/mapper/centos-home 248G 19G 229G 8% /home <== / 切了248G,實際使用18G,超浪費
tmpfs 379M 0 379M 0% /run/user/0
上面可以看到.光閒置的空間就達 90%,一開始建置時的錯誤規畫導致空間的浪費。
瘦身目標:
/ 50G->30G
/home 248G->48G
預計要省下 220G的空間
磁碟配置
磁碟配置如下,多餘資訊省略
# fdisk -l
Disk /dev/sda: 322.1 GB, 322122547200 bytes, 629145600 sectors
所用裝置 開機 開始 結束 區塊 識別號 系統
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 629145599 314059776 8e Linux LVM
*** 切給 / ****
Disk /dev/mapper/centos-root: 53.7 GB, 53687091200 bytes, 104857600 sectors
*** 切給 SWAP ****
Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
*** 切給 /home ****
Disk /dev/mapper/centos-home: 265.7 GB, 265692381184 bytes, 518930432 sectors
LVS
# lvs -v
LV VG #Seg Attr LSize Maj Min KMaj KMin Pool Origin Data% Meta% Move Cpy%Sync Log Convert LV UUID LProfile
home centos 1 -wi-ao---- <247.45g -1 -1 253 2 VvPhsC-cMWG-3U10-sjjn-737o-4UAr-1En53B
root centos 1 -wi-ao---- 50.00g -1 -1 253 0 2GB6Gv-jcFj-1k53-LRfG-xncY-y13M-u47zwz
swap centos 1 -wi-ao---- 2.00g -1 -1 253 1 icRorZ-MQ2J-GDys-oDz3-lieb-hsqq-IzYLC0
看到的和fdisk類似,
縮小磁碟配置(錯誤操作)
網路上說 xfs 的檔案格式是不能由指令來縮小,我不信邪,付出了代價,不是有 lvreduce。
先縮小/home 到48G,這個比起root安全一點,使用lvreduce指令
WARNING: Reducing active and open logical volume to 48.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.) <==警語,可能會損壞你的系統,請作好備份
Do you really want to reduce centos/home? [y/n]: y
Size of logical volume centos/home changed from <247.45 GiB (63346 extents) to 48.00 GiB (12288 extents).
Logical volume centos/home successfully resized. <== 一瞬間就好了
看起來極其順利,心中大喜,但是容量並沒有變化?
我想「對了,應該要先 umount /home」 然後再去修改磁區大小…」
於是我 umount,然後重新 mount
# mount /dev/mapper/centos-home /home
然後…
然後就死了....
mount: /dev/mapper/centos-home: can't read superblock
接下來不管怎樣都是 can't read superblock,然後什麼事也做不了。
我上網找了以下文章
https://www.itread01.com/content/1541700424.html
https://qiita.com/hanlio/items/94782fc8837336c12c1e
https://rmohan.com/?p=7372
https://www.cyberciti.biz/tips/repairing-linux-ext2-or-ext3-file-system.html
不下數十篇,通通沒用。<<已經切換到找備份還原的模式>>
syg00網友說的這個…
他說,把空間加回去和原來一樣或更大,然後祁禱…
其實這篇一開始我有試不成功,因為我想我原本空間是265G左右,然後我加回去約265G了還是失敗。
於是放棄這個方法想看有沒有其它解??
結果忙活一陣子沒效,再回來試看看。
原本我只加到整數,後來死馬當活馬醫,一直給他加
lvextend -L +130M /dev/centos/home
lvextend -L +130M /dev/centos/home
lvextend -L +130M /dev/centos/home
lvextend -L +32M /dev/centos/home
lvextend -L +32M /dev/centos/home
lvextend -L +32M /dev/centos/home
lvextend -L +32M /dev/centos/home
lvextend -L +32M /dev/centos/home
lvextend -L +7M /dev/centos/home
lvextend -L +7M /dev/centos/home
lvextend -L +7M /dev/centos/home
lvextend -L +7M /dev/centos/home
lvextend -L +1M /dev/centos/home
lvextend -L +1M /dev/centos/home
lvextend -L +1M /dev/centos/home
lvextend -L +1M /dev/centos/home
lvextend -L +1M /dev/centos/home
....
加到不能再加為止,把空間全塞給他,然後再試試 mount ,結果竟然掛載上去了。
成功,救回來了,超級高興。
唉,算了,改變策略:
原本瘦身目標:
/ 50G->30G
/home 248G->48G
修改後的目標
/ 50G 不動,把/home的檔案移過來。
新的瘦身方式
我的想法是把
1. /home/的檔案烤到 /root下,然後再 umount ./home,再把 /root 下的檔案搬到 /home
2. 把原本的 sda2 全部移掉
3. 修改vm設定,把空間縮小
這樣不知行不行?做之前我還不確定。
複製檔案
# cp -Pr /home/* ~/myhome/
16G的檔案烤了大概30分鐘
改變掛載
修改 /etc/fstab ,原本掛載的地方加上註解
#/dev/mapper/centos-home /home xfs defaults 0 0
然後重啟系統,現在 /home/ 是完全空著的狀態,把 /root 下的檔案搬過來。
# cd /root/myhome/home/
# mv * /home/
看來十分的順利。現在原本的磁區還在,只是沒有掛載,我得把他從磁碟移除。
從磁碟移除
# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
命令 (m 以獲得說明):d <== d 是刪除磁區,可先用 p 來查看
分割區編號 (1,2, default 2): 2 <== 要刪 sda2 所以輸入2
Partition 2 is deleted
命令 (m 以獲得說明):p <== 查看目前分割
Disk /dev/sda: 322.1 GB, 322122547200 bytes, 629145600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O 大小 (最小/最佳化):512 位元組 / 512 位元組
Disk label type: dos
磁碟識別碼:0x0006afc0
所用裝置 開機 開始 結束 區塊 識別號 系統
/dev/sda1 * 2048 1026047 512000 83 Linux
命令 (m 以獲得說明):w <== 寫入分割結果
分割表已變更!
呼叫 ioctl() 以重新讀取分割表。
WARNING: Re-reading the partition table failed with error 16: 裝置或系統資源忙碌中.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
同步磁碟。
<< 不明原因錯誤,忽略 >>
重開機…祁隯…
又死機了,他說我的 /root 不見了~~~
我挫屎了,根本不知道為什麼,能開機,但是磁區整個不見了
看來只能備份還原,沒別招了。
浪費整個晚上。
然後我就死了,整個磁碟不見了,可以開機但啥事都不能做。
<<切換到完蛋了+想找備份的模式>>
我沒事找事,太蠢又太懶,付出慘痛的代價。
原因就是我急著想做某些事,沒耐心的確認,/和/home竟然是sda2被我刪了。