Linux
將分區重新映射到新磁碟的正確方法?
我目前執行一個執行 Debian 的網路伺服器。我有一個 1GB 磁碟,一個 ext4 分區映射到
/
8GB 磁碟,一個 ext4 分區映射到/var/www
.在未安裝數據庫的情況下,1GB 磁碟已滿 70%。一旦我裝上 psql,我
/var
可能會填滿 1GB 磁碟。所以我想做的就是將 8GB 磁碟上的 ext4 大小調整為 4GB,並使用可用空間創建另一個分區。
現在,在我看來,我想出了以下一組步驟:
umount
並使用resize2fs
(或parted
)調整 8GB 磁碟上的分區大小。parted
在可用空間上創建一個新的 4 GB 分區。mount
要說的新分區/media/new
cp -a``/var
將我從 1GB 分區復製到新的 4GB 分區。(或者我應該tar
為此使用嗎?)- 為新分區添加一個條目
fstab
/var
從我的 1GB 磁碟和/var/www
新分區中刪除多餘的東西。我以前從來沒有做過這樣的事情,所以有人可以驗證我的步驟,看看我是否遺漏了什麼?
PS。我做了一個
du --max-depth=1
,看起來除了佔用的200MB之外/var
,還有一個300MB分配給/usr
和200MB給/lib
。我也應該移動這些嗎?
您實際上不必重新分區磁碟即可完成此操作。另一種解決方案是使用
mount -o bind
.
- 停止伺服器上執行的所有服務,並確認沒有打開 /var 的句柄
lsof | grep /var
- 如果有,則終止持有它們的程序。- 解除安裝 8GB 驅動器 (/var/www) 並將其安裝在其他位置 (例如 /mnt)
- 在您的 8GB 磁碟上,將全部內容移動到一個文件夾中 - 我們稱之為“www”。
- 將 /var/ 移動到 8GB 驅動器(為了安全起見,您可能想要複製並重命名原始驅動器)(因此,您現在有兩個文件夾 /mnt/www 和 /mnt/var)
- (由於 /var/www 在 var 中,此時將其移動到那裡更簡單(即
mv /mnt/www /mnt/var/
,儘管我應該能夠設置嵌套安裝)
- 掛載綁定/var:
mount -o bind /mnt/var /var
- 附加到 fstab:
/mnt/var /var 綁定預設值,noatime,綁定 0 0
- 檢查一切是否正常,並恢復正常操作
這種方法應該提供相同的功能,風險更小(無需重新分區/調整文件系統大小)和更大的靈活性 - 如果您想再添加兩個或三個文件夾,則不必繼續創建新分區。
順便說一句,將整個 /var 移動到第二個磁碟不是我的首選,我更傾向於移動儲存數據的目錄而不是儲存程序的目錄,例如:(您可能會發現/var/log 和 /var/lib 使用 /var 中的大部分空間)。
- /var/日誌
- /var/lib/pgsql
- /var/spool/mail(和/或 /var/vmail)
- /var/www (你已經移動了)
相同的過程可以應用於大多數目錄(除了 /boot 之類的目錄)。此外,您可以考慮使用 rsync 代替 cp,如果某些文件被鎖定等,並且您必須再次執行它,它可能會更寬容。