Linux (debian 9) - 根分割區已滿:將目錄從/移至外部磁碟機

Linux (debian 9) - 根分割區已滿:將目錄從/移至外部磁碟機

我有一個 Debian 9 系統,安裝在單一儲存裝置上。

該裝置的大小略小於 4 GB,並且有一個分割區,其中已寫入 debian 映像。

我無法刪除該設備。它是嵌入式系統的一部分,並且是永久連接的。

不過,我可以在系統中新增 SD 卡,因為如果需要更大的 FS,可以為使用者擴充功能提供備用插槽。

我的目的是在 SD 卡上建立一個分割區,可能是 16 GB 的分割區。

我想知道哪些目錄可以安全地移動到SD卡上?我怎樣才能做到這一點?

例如,許多 Linux 系統將 /home 資料夾移至單獨的實體裝置或單獨的分割區。

所以我知道我可以在 SD 檔案系統的根目錄上建立一個 /home 目錄。我不知道該怎麼做是如何告訴Debian系統/home已經移動了?想必我需要將原始檔案系統上 /home 的所有內容複製到新的 SD 卡上,然後再告訴 Debian 它已移動?

我猜我也可以移動 /tmp 和 /var 資料夾。

還有其他我可以安全移動的東西嗎?我認為在任何情況下我都不應該移動 /bin、/sbin 或 /root 嗎?

我以前使用過這樣的系統,其中 /home 位於不同的磁碟上,但我從未在安裝完成後移動它。

我也不知道應該搜尋哪些關鍵字來尋找此資訊 - 如果這看起來有點不成熟,那麼我很抱歉。謝謝

答案1

事實上,這/home並不是作業系統嚴格必要的部分,這使得這比遷移/usr到新裝置更可行。如果您要移動重要的作業系統層次結構,您可能需要關閉並從其他rescue或 Live CD 或 USB 檔案系統啟動。在您的嵌入式設備上,這可能是困難的,也可能是不可能的。

但既然你要搬家了/home,我們就可以謹慎行事。

首先,啟動進入單一使用者模式。停止非必要的服務,尤其是任何可以寫入/home.確保你的目錄pwd不在/home下,然後取得root權限:

$ cd /tmp
$ sudo -i

然後:

1)插入SD卡並建立一個分割區。建立分割區後,在其上建立一個檔案系統來保存新的/home層次結構。假設你的SD卡分割區是device/dev/sdc1

# mkfs.ext4 /dev/sdc1

2) 將新檔案系統掛載在/mnt

# mount /dev/sdc1 /mnt

3)複製(不要移動)或rsync您的/home等級制度到 SD 卡上(注意斜線)。完成後rsync,卸載SD卡:

# rsync -HAXav /home/ /mnt/
# umount /mnt

4)備份你的/etc/fstab

# cp -p /etc/fstab /etc/fstab.safety

5) 識別 SD 卡檔案系統UUID並編輯/etc/fstab以新增一個條目以將其掛載UUID到 上/home。您可以找到UUID使用blkid

# blkid /dev/sdc1
/dev/sdc1: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4"

鑑於上述輸出,您的新fstab行將是:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /home ext4 defaults 0 0

這是一個 Ubuntu 範例,因為我手邊沒有 Debian 系統。您必須將 xxxxx... 部分替換為 SD 卡檔案系統的正確 UUID,並替換ext4為您在編輯 SD 卡時使用的檔案系統類型mkfs(並在 的輸出中確認blkid)。

6)重新命名舊/home目錄:

# mv /home /home.old

7) 為SD卡建立一個新的掛載點:

# mkdir /home

此時,您應該可以手動掛載 SD 卡:

# mount /home

並查看 下的內容/home與 下的內容相同/home.old。請仔細檢查內容,包括主目錄和.ssh目錄的所有權和權限,否則系統重新啟動時可能無法遠端登入。如果可能,啟動 sshd 服務並測試非特權帳戶的遠端登入。

如果一切正常,請重新啟動。當系統恢復時,檢查已安裝檔案系統中的可用空間:

# df

您還沒有任何可用空間/,因為/home.old仍在閒逛。您應該會在以下位置看到大量可用空間/home

# du -h /
# du -h /home

一旦您對一切看起來都很好感到滿意,您就可以擺脫/home.old

# cd /; rm -rf home.old

rm /etc/fstab.safety也可以,但它可能足夠小,離開它也沒什麼壞處。

相關內容