作者 主題: VBox + PC-BSD9.2 zfs vdi 擴充分享  (閱讀 1210 次)

0 會員 與 1 訪客 正在閱讀本文。

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
VBox + PC-BSD9.2 zfs vdi 擴充分享
« 於: 2014-01-23 02:17 »
安裝 PC-BSD 9.2(based on FreeBSD)目的本來只是想做一些測試而已
所以一開始只建立 8GB 的 vdi,但是安裝好之後用 ports 裝個 firefox
卻搞笑了,磁碟可用空間變 0,連安裝都無法進行
只好重新建了一個 10GB 的 vdi 安裝.....

印象中 freebsd 好象有個 growfs 可用,於是開始爬網加不斷測試
最後成功將 10GB 擴充到 12GB,以下是操作過程..

---
(在 bsd 桌面開 terminal 先查看一下,確認容量,然後直接 poweroff)
代碼: [選擇]
% zfs list tank
NAME   USED  AVAIL  REFER  MOUNTPOINT
tank  6.81G  2.48G    31K  legacy
% poweroff

PC-BSD 9.2 在安裝時預設就使用 zfs 作為系統的 fs



建議先在 host 將 這個 vdi clonehd 另一個備份檔
萬一擴充失敗就不用重灌,直接再 clone 一個繼續努力  ;D

代碼: [選擇]
$ VBoxManage clonehd PC-BSD9.2.x64-01.vdi PC-BSD9.2.x64-02.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: f8481317-8466-4d07-ad90-0d6f303367b1

(查看 vdi 資訊)
代碼: [選擇]
$ VBoxManage showhdinfo  PC-BSD9.2.x64-01.vdi
UUID:           391cbbc3-637b-42c0-90d9-0e724241d74d
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /VDIs/BSD/PC-BSD9.2.x64-01.vdi
Storage format: VDI
Format variant: dynamic default
Capacity:       10240 MBytes
Size on disk:   10047 MBytes
In use by VMs:  PC-BSD9.2.x64 (UUID: 82dd5803-3730-4af2-8cb1-6583d0c888a8)
Child UUIDs:    b464c94c-31bd-44a8-8c8f-66086d4f15c1

(將 vdi resize 到 12GB)
代碼: [選擇]
$ VBoxManage modifyhd PC-BSD9.2.x64-01.vdi --resize 12288
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
$ VBoxManage showhdinfo  PC-BSD9.2.x64-01.vdi
UUID:           391cbbc3-637b-42c0-90d9-0e724241d74d
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /VDIs/BSD/PC-BSD9.2.x64-01.vdi
Storage format: VDI
Format variant: dynamic default
Capacity:       12288 MBytes
Size on disk:   10047 MBytes
In use by VMs:  PC-BSD9.2.x64 (UUID: 82dd5803-3730-4af2-8cb1-6583d0c888a8)
Child UUIDs:    b464c94c-31bd-44a8-8c8f-66086d4f15c1


重新啟動 VM,看到 PC-BSD 開機畫面時按住 left-SHIFT 然後進入單人模式

(啟動 sshd)
代碼: [選擇]
# ifconfig em0 inet 192.168.1.15 netmask 255.255.255.0
# route add default 192.168.1.1
# /etc/rc.d/sshd onestart

也可以直接在 vm 裡操作,不一定要啟動 bsd 的 sshd,
只是在 vm 裡沒法抓畫面資料或是貼上指令 XD

(重新掛載 / 為 rw mode)
代碼: [選擇]
# df
Filesystem        1K-blocks    Used   Avail Capacity  Mounted on
tank/ROOT/default   9340979 6736917 2604062    72%    /
devfs                     1       1       0   100%    /dev
# mount -o remount,rw tank/ROOT/default /

如果沒有要改什麼檔案的話就不需要 remount

(查看硬碟狀態)
代碼: [選擇]
# gpart show
=>      63  25165761  ada0  MBR  (12G)
        63        63        - free -  (31k)
       126  20971377     1  freebsd  [active]  (10G)
  20971503   4194321        - free -  (2.0G)

=>       0  20971377  ada0s1  BSD  (10G)
         0  19902464       1  freebsd-zfs  (9.5G)
  19902464   1048576       2  freebsd-swap  (512M)
  20951040     20337          - free -  (10M)

上面顯示 ada0 已經有 12GB了,這是剛才在 host 下 modifyhd resize 的結果
而且也有看到增加的 2GB(free) 的部分,現在要先把這 2GB 加到 freebsd [active] 這裡

代碼: [選擇]
# gpart recover ada0
ada0 recovering is not needed
# gpart resize -i 1 ada0
gpart: Device busy
# sysctl kern.geom.debugflags=16
# gpart resize -i 1 ada0
ada0s1 resized

-i 參數的 1 就是 ada0 表中 freebsd 前面的數字(index)
resize 沒有指定 -s size 表示要擴充全部空間
擴充成功後,下面的表可以看到 freebsd [active]  還有 ada0s1 都顯示 12GB

代碼: [選擇]
# gpart show
=>      63  25165761  ada0  MBR  (12G)
        63        63        - free -  (31k)
       126  25165665     1  freebsd  [active]  (12G)
  25165791        33        - free -  (16k)

=>       0  20971377  ada0s1  BSD  (12G)
         0  19902464       1  freebsd-zfs  (9.5G)
  19902464   1048576       2  freebsd-swap  (512M)
  20951040     20337          - free -  (10M)

這邊要注意,ada0s1 雖然顯示 12GB, 但是 Block sizes 卻還是原來的大小
free 也不是預想中的 2GB,這裡我也試了給 ada0s1 resize,不過完全無效
事實上,我在這裡卡了大多數時間,網路上查看到的資料也都無解
也試用過 growfs,但是 growfs 目前並末支援 zfs

代碼: [選擇]
# gpart resize -i 1 ada0s1
ada0s1a resized
[root@] ~# gpart show ada0s1
=>       0  20971377  ada0s1  BSD  (12G)
         0  19902464       1  freebsd-zfs  (9.5G)
  19902464   1048576       2  freebsd-swap  (512M)
  20951040     20337          - free -  (10M)

# growfs ada0s1
growfs: superblock not recognized

(man growfs)
growfs -- expand an existing UFS file system

最後實在不知道該怎麼辦,想說就 reboot 看看好了...

代碼: [選擇]
# reboot

$ ssh xxxx@192.168.1.15
FreeBSD 9.2-RELEASE-p11 (GENERIC) #0 r+7962ca0: Mon Dec  2 16:13:10 UTC 2013

Welcome to PC-BSD!

For information on the web, visit us at www.pcbsd.org
Could not chdir to home directory /usr/home/xxx: No such file or directory
% sudo -i
[root@] ~# gpart show
=>      63  25165761  ada0  MBR  (12G)
        63        63        - free -  (31k)
       126  25165665     1  freebsd  [active]  (12G)
  25165791        33        - free -  (16k)

=>       0  25165665  ada0s1  BSD  (12G)
         0  19902464       1  freebsd-zfs  (9.5G)
  19902464   1048576       2  freebsd-swap  (512M)
  20951040   4214625          - free -  (2.0G)

reboot 後(一樣進入單人模式)意外發現 ada0s1 都自動抓到增加的空間
那就可以繼續進行下去

代碼: [選擇]
[root@] ~# gpart recover ada0s1
ada0s1 recovering is not needed
[root@] ~# gpart resize -i 1 ada0s1
gpart: Device busy
[root@] ~# sysctl kern.geom.debugflags=16
kern.geom.debugflags: 0 -> 16
[root@] ~# gpart resize -i 1 ada0s1
ada0s1a resized
[root@] ~# gpart show ada0s1
=>       0  25165665  ada0s1  BSD  (12G)
         0  19902464       1  freebsd-zfs  (9.5G)
  19902464   1048576       2  freebsd-swap  (512M)
  20951040   4214625          - free -  (2.0G)

這裡因為還有一個 swap(index = 2),新增的空間無法直接給 zfs(index = 1)
試了一下是可以配置給 swap,也就是說新增加的空間確定可以使用

代碼: [選擇]
[root@] ~# gpart resize -i 2 ada0s1
ada0s1b resized
[root@] ~# gpart show ada0s1
=>       0  25165665  ada0s1  BSD  (12G)
         0  19902464       1  freebsd-zfs  (9.5G)
  19902464   5263201       2  freebsd-swap  (2.5G)

因此只好先刪掉 swap,等配置好 zfs 容量後再建立一個 swap

代碼: [選擇]
[root@] ~# gpart delete -i 2 ada0s1
[root@] ~# gpart resize -i 1 -s 24117089 ada0s1
ada0s1a resized
[root@] ~# gpart show ada0s1
=>       0  25165665  ada0s1  BSD  (12G)
         0  24117089       1  freebsd-zfs  (11G)
  24117089   1048576          - free -  (512M)

[root@] ~# gpart add -t freebsd-swap -i 2 ada0s1
ada0s1b added
[root@] ~# gpart show ada0s1
=>       0  25165665  ada0s1  BSD  (12G)
         0  24117089       1  freebsd-zfs  (11G)
  24117089   1048576       2  freebsd-swap  (512M)

這樣就完工了,最後看一下 zpool 的情形如何

代碼: [選擇]
[root@] ~# zpool online -e tank ada0s1a
[root@] ~# df -h
Filesystem           Size    Used   Avail Capacity  Mounted on
tank/ROOT/default     10G    6.4G    4.5G    59%    /
devfs                1.0k    1.0k      0B   100%    /dev

tank 容量確實擴充到 4.5GB

代碼: [選擇]
# reboot
進入 gnome 後開 terminal

代碼: [選擇]
% df -h
Filesystem                  Size    Used   Avail Capacity  Mounted on
tank/ROOT/default            10G    6.6G    4.3G    61%    /
devfs                       1.0k    1.0k      0B   100%    /dev
procfs                      4.0k    4.0k      0B   100%    /proc
linprocfs                   4.0k    4.0k      0B   100%    /compat/linux/proc
tank/tmp                    4.3G     81k    4.3G     0%    /tmp
tank/usr/home               4.3G     32k    4.3G     0%    /usr/home
tank/usr/home/xxx           4.3G     26M    4.3G     1%    /usr/home/xxx
tank/usr/jails              4.3G     31k    4.3G     0%    /usr/jails
tank/usr/obj                4.3G     31k    4.3G     0%    /usr/obj
tank/usr/pbi                4.3G     64k    4.3G     0%    /usr/pbi
tank/usr/ports              4.5G    206M    4.3G     5%    /usr/ports
tank/usr/ports/distfiles    4.4G    154M    4.3G     3%    /usr/ports/distfiles
tank/usr/src                4.3G     31k    4.3G     0%    /usr/src
tank/var/audit              4.3G     33k    4.3G     0%    /var/audit
tank/var/log                4.3G    102k    4.3G     0%    /var/log
tank/var/tmp                4.3G     32k    4.3G     0%    /var/tmp
% zfs list tank
NAME   USED  AVAIL  REFER  MOUNTPOINT
tank  7.06G  4.20G    31K  legacy

以上~~ 收工睡覺 ^_^


ps: 弄了大半天,不知道有沒有簡單一點的方法  :P