想將ubuntu更換到另外一塊硬盤,又不想重裝系統,於是嘗試了clonezilla、dd、tar三種方式。該ubuntu系統是將根目錄、boot目錄等所有系統目錄都安裝在一個分區內。
clonezilla和dd兩種方式都失敗了,因為新硬盤的分區大小和老硬盤的根目錄分區大小不一致,前兩鍾方式導致新盤分區的大小被改變。辦法應該是有的,我沒有研究clonezilla正確使用姿勢。而dd命令估計應該使用skip跳過老盤分區表讀取數據,再使用seek跳過新盤分區表將數據寫入新盤分區(可以使用fdisk -l查看兩個分區的開始位置),今后再做實驗。
剛開始想偷懶,直接在運行中的老系統做tar包,使用了“-exclude=/proc/* --exclude=/mnt/* --exclude=/sys/* --exclude=/tmp/* --exclude=/wjbf/* --exclude=/backup.tgz”參數去排除不需要或者不能打包的目錄。然額,悲劇的是,/var目錄下一堆文件和目錄報錯不可讀取,特別是涉及docker的目錄。於是重啟系統用安裝光盤進入救援模式,掛載老盤根分區到/mnt/old,這樣就無需排除任何不能打包的系統目錄了,進入掛載目錄后就兩步搞定:
1、將老盤根文件系統打包到一個單獨的分區/mnt/wjbf,然后又解包到新盤所在目錄/mnt/new下:
/mnt/old# tar cpf /mnt/wjbf/md127backup.tar .
/mnt/old# tar xpf /mnt/wjbf/md127backup.tar -C /mnt/new/
如果沒有其他分區可用,只能打包在old目錄,則在打包時,排除
md127backup.tar文件:
/mnt/old# tar cpf md127backup.tar --exclude=md127backup.tar .
/mnt/old# tar xpf md127backup.tar -C /mnt/new/
然后修改
/mnt/new/etc/fstab等文件,以符合掛載其他分區的需要。
2、在新盤/dev/sda重建grub引導記錄:
mount -t proc proc /mnt/new/proc
mount -t sysfs sys /mnt/newsys
mount -o bind /dev /mnt/new/dev
mount -t devpts pts /mnt/new/dev/pts/
chroot /mnt/new/
grub-install /dev/sda
grub-install --recheck /dev/sda
update-grub
打完收工。