如何將根檔案系統從正在運行的系統遷移到另一個分割區?

如何將根檔案系統從正在運行的系統遷移到另一個分割區?

我嘗試將根檔案系統從 ext4 遷移到另一種分區類型 (zfs),並從一個簡單的開始

rsync -a --exclude=/boot --exclude=/mnt --exclude=/media --exclude=/tmp 
--exclude=[all zfs pools with default mountpoint] 
/ /target/directory/mountpoint/

然後傳輸卡在 中的不同文件中/proc,添加後--exclude=/proc rsync卡在 中的一個文件中/sys/devices,這導致我放棄嘗試和錯誤。閱讀完man proc並了解/sys維基百科)我意識到,找到它需要比簡單的解決方案更多的研究。我希望有人能幫忙。根系統是 Ubuntu 14.04 amd64(也是即時系統,但如果這是一個限制問題,請隨時提出建議)。

當然,啟動即時系統並將資料複製到那裡很容易,但這只是解決該問題的解決方案。

答案1

我將首先對此進行免責聲明,因為我沒有可以用來測試啟動是否真正有效的系統。這個答案是基於我的理解,你應該只在開發系統上嘗試這個,直到你確認它有效。

由於/dev/sys/proc都是虛擬檔案系統,我認為作業系統應該在啟動時創建它們的內容。如果這是真的,您應該能夠執行以下操作:

rsync -ax / /target/directory/mountpoint

-x 告訴 rsync 不要跨越檔案系統邊界,因此它將跳過虛擬檔案系統,並且無需指定 zfs 池。它仍然會建立安裝點,但它們將是空的。

如果您的 /tmp 不是它自己的分割區,並且您不想複製這些文件,您仍然需要手動--exclude複製。

答案2

檢查您是否正在執行 LVM。如果是這樣,您可以使用 LVM 進行檔案系統快照,然後從那裡複製。

發明這些是因為需要從靜態檔案系統建立備份,否則備份不是很有用。快照將解決跨裝置問題以及臨時檔案問題。

請注意,如果您有任何大型檔案(例如處於活動狀態的資料庫),rsync 和其他備份可能會產生不一致的版本,因為檔案的一部分將在資料庫變更之前複製,而其他檔案則在資料庫變更之後複製。快照也是解決這個問題的一種嘗試。

注意:btrfs 具有更高級的檔案系統快照形式,但如果您已經在執行 ext4,那麼這次就太晚了。

答案3

輔助:如果可以(如果在本地控制台則可以,如果通過 ssh 連接或需要保持系統完全運行則不能),更改為運行級別 1(“單用戶模式”,命令為“init 1”)在做這樣的事情之前。這將停止所有在複製檔案系統時可能更改檔案系統中的內容的非必要進程。

請注意調整您的 fstab,尤其是在使用 UUID 的情況下。

考慮使用“chroot /where/the/new/root/is/mounted /bin/bash”來測試新複製的檔案系統,並可能重新安裝引導程式。您可能需要在 chroot 下手動掛載 /proc 和 /sys。

如果從 chroot 重新安裝開機載入程序,請確保 /etc/mtab(在 chroot 系統中)不包含使載入程式安裝程式感到困惑的垃圾。如果是 grub 1.x ,您可能必須刪除(新的) /boot/device.map 檔案。

如果你想安全地使用/dev,你可以用“MAKEDEV generic”填充它(在新的文件系統中)——這將在udev 掛載點“下方”創建一組設備文件,以防止你的系統嚴重崩潰啟動時以防 udev 不起作用。

相關內容