標籤:ubuntu12.04 分區 調整 rsync
概述
在WMware中安裝Ubuntu 12.04時,分區大小預設使用了20G,安裝完成後根目錄大小隻有12G。因為一開始打算將源碼放到單獨掛載的分區中,所以覺得12G應該也足夠。但在Android源碼編譯過程中遇到了空間不足的問題,源碼編譯最後會將相關的img檔案壓縮成zip包,這個步驟會暫時利用/tmp這個目錄。因為根目錄只有12G,再加上/home下存放了一點東西,Android源碼編譯最後打包時,提示根目錄空間不足打包操作被終止。
本文的目的是,動態調整分區大小,擴大根分區容量,避免Android編譯無法打包。
轉載請務必註明出處http://blog.csdn.net/yihongyuelan
步驟分區擴充計劃
在概述中已提到原有根分區只有12G,本文計劃將其替換為20G。這裡說的是替換,也就是用20G的根分區替換12G的根分區,那麼也就還會剩下12G的容量,計劃將這12G給/home獨立使用。調整之後的硬碟掛載情況1所示:
圖1 調整之後WMware掛載硬碟資訊
在Ubuntu中使用df -h查看分區情況2所示:
圖2 Ubuntu中查看分區資訊
從圖2中可以看到,根分區從/dev/sda1變成了/dev/sdc1而大小由12G變成了20G,原來的/dev/sda1則掛載到了/home目錄。
建立虛擬硬碟
在WMWare->Settings中添加新的硬碟,步驟比較簡單具體不表。在指定磁碟容量的時候,建議勾選上立即分配所有磁碟空間,3:
圖3 勾選"立即分配所有磁碟空間(A)"
根分區遷移
在完成新硬碟的添加之後,記得在Ubuntu中使用fdisk或者Disk Utility工具對新硬碟進行分區和格式化,之後就需要對原來的根目錄進行備份了。新硬碟格式化和分區完成之後,這裡即/dev/sdc1,其掛載到/new_root,在終端中執行:
sudo mkdir /new_rootsudo mount /dev/sdc1 /new_root
因為需要對當前的根目錄進行遷移,所以需要建一個備份目錄/old_root,並將當前根目錄掛載到/old_root (當前根目錄即/dev/sda1) ,因此操作如下:
sudo mkdir /old_rootsudo mount /dev/sda1 /old_root
接著就需要使用rsync指令來完成根目錄的遷移了。
rsync是類unix系統下的資料鏡像備份工具,即remote sync。rsync是Linux系統下的檔案同步和資料轉送工具,可以在客戶機和遠程檔案伺服器之間進行檔案同步,也可以在本地系統中,將資料從一個分區備份到另一個分區上。如果rsync在備份過程中出現了資料轉送中斷,恢複後可以繼續傳輸不一致的部分,並且rsync可以執行完整備份或增量備份(具體資訊可以man一下,中文翻譯參考這裡)。
使用rsync命令,將/old_root備份到/new_root:
sudo rsync -lva /old_root/. /new_root
參數解釋:
-l表示保持軟連結;
-a表示archive 歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等於-rlptgoD;
-v表示操作過程詳細輸出;
完成之後卸載old_root:
sudo umount /old_root
修改/etc/fstab
因為/new_root後續就是新的根分區,所以需要修改/new_root下的fstab檔案,即/new_root/etc/fstab,修改如下:
#UUID=46df0a25-8f0f-4ef5-90c0-8a665f4ab82d / ext4 errors=remount-ro 0 1/dev/sdc1 / ext4 errors=remount-ro 0 1
第一行表示注釋掉原來的根目錄掛載,第二行表示新的裝置為/dev/sdc1掛載到根目錄。
因為要把開機磁碟分割切換到/dev/sdc1,所以要將啟動相關的資訊更新到grub菜單中,繼續在終端中執行:
sudo grub-install /dev/sdc
在grub啟動菜單中加入/dev/sdc,之後更新grub啟動菜單:
sudo update-grub
更改啟動順序 現在裝置/dev/sda1即原來的根目錄(old_root),新裝置/dev/sdc1即新的根目錄(new_root),都已經加入了grub啟動菜單,需要設定哪個裝置優先載入,即啟動順序。修改啟動順序實際上就是進入BIOS中,設定硬碟的載入順序。
完成以上操作之後,選擇重啟,並快速短按F2(虛擬機器開機時有提示),進入BIOS操作介面,通過左右方向鍵選擇"Boot"菜單,並通過上下方向鍵選擇Hard Drive子功能表,4所示:
圖4 WMware BIOS介面
將新添加的硬碟/dev/sdc1通過+/-調節到Bootable Add-in Cards下第一個,這裡即VMware Virtual SCSI Hard Drive (0:2),之後通過F10儲存並退出,重啟即可進入系統。完成以上操作之後,根分區的遷移大致就已完成。
獨立/home分區
根分區已經從/dev/sda1切換到了/dev/sdc1,因此/dev/sda1已經沒有用了,為了資源極大化利用,我打算將其作為/home獨立分區,而操作步驟和備份根分區時的操作差不多。建立一個/home_new,將/dev/sda1掛載到/home_new,將/dev/sda1中原有的內容刪掉,並通過rsync將/home中的內容同步到/home_new,將/home重新命名為/home_bak,將/home_new重新命名為/home,並修改/etc/fstab如下:
/dev/sda1 /home ext4 defaults,user,exec,dev,suid 0 0
儲存之後重啟,通過df -h就能看到5中的效果了:
圖5 調整後的分區
遇到的問題
雖然文章中描述的步驟明確,但在實際操作過程中也遇到了很多坑,如:
1. 如果不建立/old_root檔案夾就開始執行
sudo rsync -lva / /new_root
這樣會導致遞迴備份,即/new_root/new_root/new_root/....無限迴圈下去;
2. 如果發現/new_root目錄下./ 和 .. / 的ower和group不對,可執行
sudo chown root:root ./ ../
總結
因為之前將根分區設定得太小,導致源碼編譯打包時空間不足,從而無法完成打包操作,根分區擴充後問題解決。如果遇到重裝系統的問題,獨立的/home分區可以複用,許多配置不用重新再設定一遍。
VMware Ubuntu 12.04分區動態調整小記