[ESXI5.5] VM+ CentOS7 縮小磁碟空間操作記錄

URL Link //n.sfs.tw/14864

2020-12-11 22:10:15 By 張○○

我原始的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指令

# lvreduce -L 48G /dev/mapper/centos-home
  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

不下數十篇,通通沒用。<<已經切換到找備份還原的模式>>

最後找到這篇
https://www.linuxquestions.org/questions/linux-newbie-8/after-lvreduce-reboot-now-can%27t-read-superblock-4175576100/

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設定,把空間縮小

這樣不知行不行?做之前我還不確定。

複製檔案

# mkdir /root/myhome
# 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): <== 要刪 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被我刪了。

參考資料

[1] https://t.codebug.vip/questions-1653589.htm

[2] 移除磁區 https://phoenixnap.com/kb/delete-partition-linux