Linux

如何更改分區?

  • March 9, 2014

我有一個帶有/,/ home的硬碟。我剛得到新的 SSD,我需要更改我的分區而無需重新安裝。我想創建一個單獨的 /var 分區(目前位於 / 下)並將其保留在硬碟上。其餘的/(包括/boot)我想移到ssd。我應該如何在 ubuntu 12.04 中做到這一點?

cat /etc/fstab
proc            /proc           proc    nodev,noexec,nosuid 0       0
UUID=4f614ad4-8b21-4e21-b6fc-13ba7f489a88 /               ext4    errors=remount-ro 0       1
UUID=dba112c1-1647-4e73-b907-0117ad3a058e /home           ext3    defaults        0       2
UUID=01CB6A18FD7DF1C0 /windows/c      ntfs    defaults,umask=007,gid=46 0       0
UUID=01CB6A18E6F42370 /windows/d      ntfs    defaults,umask=007,gid=46 0       0
UUID=48d5b437-91c9-4304-9bde-ee661779089d none            swap    sw              0       0

我也有一些 lvm 分區,但它們與這個問題無關

他們這樣做的方法是根據需要對 SSD 進行分區(/、/boot、/home 等),並且由於您將所有內容都移動到新的 SSD,因此您無需擔心縮小分區或任何事情那樣複雜。您基本上只需將所有內容複製到 SSD,重新分區 HDD 並在磁碟和 fstab 中編輯您的掛載點。

準備遷移

  1. 備份您目前的硬碟!
  2. 對 SSD 進行分區

出於展示的目的,我將使用這些分區:

  • /dev/sdb1 – /啟動
  • /dev/sdb2 – /
  • /dev/sdb3 – /home如果需要,您可以省略 /boot 並將其保留為 / 中的普通目錄,就像您目前所做的那樣。
  1. 在新分區上創建文件系統(mkfs.ext4mkfs.whatever 您想要的文件系統)
  2. 在目前文件系統的層次結構下掛載新分區。例如,將 SSD 上的新 / 掛載為 /mnt,將 SSD 上的新 /boot 和 /mnt/boot 掛載,SSD 上的新 /home 掛載為 /mnt/home
  • 例如:
mkdir -p /mnt/newroot
mkdir /mnt/newroot/boot
mkdir /mnt/newroot/home
mount /dev/sdb2 /mnt/newroot
mount /dev/sdb1 /mnt/newroot/boot
mount /dev/sdb3 /mnt/newroot/home


從 HDD 遷移到 SSD
-------------


1. 將所有內容複製(保留時間戳、權限和所有權)到新分區中。


您可以使用以下一組命令
 -ax --sparse=always / /mnt/newroot
 -ax --sparse=always /home /mnt/newroot /home
或者
ync -avSx / /mnt/newroot
ync -avSx /home /mnt/newroot/home
這些將使用存檔標誌進行複制(保留文件所有權和其他資訊),在可能的情況下進行稀疏複製,並且不會跨越源文件系統上的文件系統邊界。如果您沒有指定`-x`保留在文件系統中的標誌,您可以在一個命令中進行複制,但需要採取措施從副本中排除 /proc、/dev 和其他記憶體中的文件系統。
2. 編輯文件 /mnt/newroot/etc/fstab 並更改條目以反映新分區
3. 將 grub 安裝到新磁碟(如果它將是您的引導設備)並將其指向 SSD 上的新 /boot,以便它可以找到其引導配置。
4. 解除安裝新分區。

umount /mnt/newroot/home umount /mnt/newroot/boot umount /mnt/newroot



驗證遷移
----


1. 重新啟動到新分區


  * 如果您正確設置 grub 並且新的 /etc/fstab 是正確的,則引導的行為將與以前完全相同,只是它使用的是新分區而不是舊分區。
2. 驗證一切是否正確。


  * 如果沒有預料到的事情,您將保留舊磁碟並進行備份。什麼都沒有失去。然而。
  * 除了在新磁碟上複製它們之外,我沒有關於 Windows 分區的建議(使用複製工具,或者`dd`,如果你正在移動它們)
  * 如果您要雙啟動到 Windows,請驗證是否仍然可以工作並且 Windows 是否在 SSD 上(如果您想要 SSD,如果您將其保留在 HDD 上,那也可以)
  * 這些天我沒有跟上Windows的速度,所以我在這方面沒有什麼可提供的。


### 此時,您的 SSD 上應該有一個工作系統,該系統是 HDD 上的複製。超出這一點的任何步驟都將對您的舊數據造成破壞。在繼續之前進行備份


重新調整硬碟的用途
---------


1. 重新分區硬碟


  * 如果您沒有接觸 Windows 分區,只需刪除您不再需要的 linux 分區並為 /var 和您需要的任何其他分區創建一個新分區。
  * 如果您確實將 Windows 移至 SSD,則可以完全重新分區 HDD。
2. 為新的 /var 創建文件系統
3. 將這個新的 /var 臨時掛載為 /mnt/var 什麼的

mkdir /mnt/var mount /dev/sd?? /mnt/var

4. 停止依賴 /var 的服務或進入單使用者模式


  * 這是必需的,因為如果在複製期間守護程序正在寫入 /var,當我們切換到新的 /var 時,您將失去這些新數據。單使用者模式也是執行級別 1(`init 1`在 sysvinit 上,不確定新貴)
5. 將舊 / var 複製到新 / var

cp -av –sparse=always /var /mnt/var

6. 刪除舊的 /var (保留目錄,但使其為空)。

rm -rf /var mkdir /var

7. 解除安裝新的 /var

umount /mnt/var

8. 編輯`/etc/fstab`並為 /var 添加一個條目
9. 掛載 /var(如果您編輯了 fstab,這將是新的)。

mount /var

10. 重新啟動您停止的任何服務或返回多使用者模式(或根據需要重新啟動)


這個一般過程應該可以幫助您進行遷移,最重要的一步是備份,以防萬一您搞砸了。

引用自:https://unix.stackexchange.com/questions/118768