close
『雲端』與『姆指電』-自行製作 OpenSolaris 開機姆指碟
- 前言
- 一個可能在 Run PC 出現的問答-PC Run OpenSolaris:
- 問:請問 OpenSolaris 在 PC 上也可以 Run 嗎?
- 答:其實在 PC 上可以 Run 的作業系統有很多。大家都熟知的 Windows 當然是一種, Linux 當然也是一種,另外像 Solaris/OpenSolaris 其實也可以在 PC 上 RUN。 OpenSolaris 是一個像 Linux 一樣開放原始碼的作業系統。它也和 Linux 一樣提供有 LiveCD 或 LiveUSB 可以用光碟或 USB 開機。
- 配合未來的『雲端』環境,以後網咖只要提供『姆指電』的插槽,每個使用者都可以有個人開機的環境及『本地』和『雲端』的儲存空間。
- 說到『雲端』與『姆指電』,今天是記者節,很幸運有機會訪問到 Chao-Chin Hung 大大。 Chao-Chin Hung 大大對『姆指電』可是研究了一段時間。不過因為我不是記者,因此您會看到的是我整理後的筆記而不是一問一答實況報導的訪問記錄。有那麼一點點抱歉...
- 以下是採訪 Chao-Chin Hung 大大的記實:
- 空間規劃使用
- 我們的計劃是在姆指碟上有一個區域是用來存放開機用的 Live USB 影像,另外有兩個區域是 ZFS 及 FAT32 用來存放資料。基於一些可能的限制,我們將 FAT32 放在第一個分割。在姆指碟上分成兩個分割(Partition),分別是 FAT32 及 Soalris 2。在 Solaris2 中再分為兩個切片(Slice),分別為 UFS 及 ZFS 的檔案系統。其中切片 0 使用 UFS 檔案系統,而切片 1 使用 ZFS 檔案系統。
MBR |
P1: FAT32 |
P2: Solaris 2
|
- 對於空間大小的規劃則為:Live USB 1.5GB,ZFS 0.5GB,其餘的則保留給 FAT32。
- 取得適當的 USB 影像檔
- 直接下載,目前 OpenSolaris 的安裝下載網址通常都提供了 ISO 及 USB 兩種格式的選擇。
- 自行製作,這個部份也許下次有機會採訪 Chao-Chin Hung 大大時再報導。
- 可以使用以下幾種方式取得姆指碟的影像檔:
- 安裝複製 USB 影像檔的工具
- 參考以下的程序安裝 Distribution Constructor,以便使用 usbcopy 工具:
root@X-Wing:~ # pkg install SUNWdistro-const DOWNLOAD PKGS FILES XFER (MB) Completed 1/1 75/75 0.2/0.2 PHASE ACTIONS Install Phase 106/106 root@X-Wing:~ # pkg list SUNWdistro-const NAME (PUBLISHER) VERSION STATE UFIX SUNWdistro-const 0.5.11-0.118 installed u---
- 確認姆指碟運作正常
- 在將 USB 姆指碟插入電腦之後檢查是否偵測到設備:
root@X-Wing:~ # rmformat 正在尋找裝置... 1. Logical Node: /dev/rdsk/c3t0d0p0 Physical Node: /pci@0,0/pci1179,1@1a,7/storage@1/disk@0,0 Connected Device: USB Flash Disk 5.00 Device Type: Removable Bus: USB Size: 4.0 GB Label: <None> Access permissions: 媒體沒有寫入保護。
- 檢查目前的磁碟分割方式
- 使用 fdisk 指令可檢視目前姆指碟的現況:
root@X-Wing:~ # fdisk /dev/rdsk/c3t0d0p0 Total disk size is 509 cylinders Cylinder size is 16065 (512 byte) blocks Cylinders Partition Status Type Start End Length % ========= ====== ============ ===== === ====== === 1 Ext Win95 0 379 380 75 2 Active Solaris2 380 508 129 25 SELECT ONE OF THE FOLLOWING: 1. Create a partition 2. Specify the active partition 3. Delete a partition 4. Change between Solaris and Solaris2 Partition IDs 5. Exit (update disk configuration and exit) 6. Cancel (exit without updating disk configuration) Enter Selection: 6
- 記錄下來一個磁柱的大小(有多少個區塊)。
- 檢查是否掛載此一姆指碟
- 確認目前並無掛載此一姆指碟上的分割或切片,若有則進行卸載:
root@X-Wing:~ # mount -p | grep c3t0d0 /dev/dsk/c3t0d0s0 - /media/Flash Disk ufs - no rw,nosuid,intr,largefiles,logging,xattr,onerror=panic /dev/dsk/c3t0d0p0:1 - /media/EVEREASY pcfs - no nosuid,hidden,nofoldcase,clamptime,noatime,timezone=-28800 root@X-Wing:~ # umount /dev/dsk/c3t0d0s0 root@X-Wing:~ # umount /dev/dsk/c3t0d0p0:1
- 清除姆指碟
- 清除姆指碟的第一個磁柱:
root@X-Wing:~ # dd if=/dev/zero of=/dev/rdsk/c3t0d0p0 bs=512 count=16065 進來 16065+0 個記錄 出去 16065+0 個記錄
- 劃分磁區分割
- 參考以下程序劃出 FAT32 及 SOLARIS2 的分割:
root@X-Wing:~ # fdisk /dev/rdsk/c3t0d0p0 No fdisk table exists. The default partition for the disk is: a 100% "SOLARIS System" partition Type "y" to accept the default partition, otherwise type "n" to edit the partition table. n Total disk size is 1998 cylinders Cylinder size is 4096 (512 byte) blocks Cylinders Partition Status Type Start End Length % ========= ====== ============ ===== === ====== === WARNING: no partitions are defined! SELECT ONE OF THE FOLLOWING: 1. Create a partition 2. Specify the active partition 3. Delete a partition 4. Change between Solaris and Solaris2 Partition IDs 5. Exit (update disk configuration and exit) 6. Cancel (exit without updating disk configuration) Enter Selection: 1 Select the partition type to create: 1=SOLARIS2 2=UNIX 3=PCIXOS 4=Other 5=DOS12 6=DOS16 7=DOSEXT 8=DOSBIG 9=DOS16LBA A=x86 Boot B=Diagnostic C=FAT32 D=FAT32LBA E=DOSEXTLBA F=EFI 0=Exit? C Specify the percentage of disk to use for this partition (or type "c" to specify the size in cylinders). 50 Should this become the active partition? If yes, it will be activated each time the computer is reset or turned on. Please type "y" or "n". n Select the partition type to create: 1=SOLARIS2 2=UNIX 3=PCIXOS 4=Other 5=DOS12 6=DOS16 7=DOSEXT 8=DOSBIG 9=DOS16LBA A=x86 Boot B=Diagnostic C=FAT32 D=FAT32LBA E=DOSEXTLBA F=EFI 0=Exit? 1 Specify the percentage of disk to use for this partition (or type "c" to specify the size in cylinders). 49 Should this become the active partition? If yes, it will be activated each time the computer is reset or turned on. Please type "y" or "n". y Partition 2 is now the active partition. Total disk size is 1998 cylinders Cylinder size is 4096 (512 byte) blocks Cylinders Partition Status Type Start End Length % ========= ====== ============ ===== === ====== === 1 Win95 FAT32 1 999 999 50 2 Active Solaris2 1000 1978 979 49 SELECT ONE OF THE FOLLOWING: 1. Create a partition 2. Specify the active partition 3. Delete a partition 4. Change between Solaris and Solaris2 Partition IDs 5. Exit (update disk configuration and exit) 6. Cancel (exit without updating disk configuration) Enter Selection: 5
- 劃分磁區切片
- 參考以下程序劃出切片(slice) 0 及 切片(slice) 1:
root@X-Wing:~ # format -e Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c3t0d0 <DEFAULT cyl 977 alt 2 hd 128 sec 32> /pci@0,0/pci1179,1@1a,7/storage@1/disk@0,0 1. c4t0d0 <DEFAULT cyl 3889 alt 2 hd 255 sec 63> HD-0160G /pci@0,0/pci1179,1@1f,2/disk@0,0 2. c4t1d0 <DEFAULT cyl 5871 alt 2 hd 255 sec 63> HD-0250G /pci@0,0/pci1179,1@1f,2/disk@1,0 Specify disk (enter its number): 0 selecting c3t0d0 [disk formatted] FORMAT MENU: disk - select a disk type - select (define) a disk type partition - select (define) a partition table current - describe the current disk format - format and analyze the disk fdisk - run the fdisk program repair - repair a defective sector label - write label to the disk analyze - surface analysis defect - defect list management backup - search for backup labels verify - read and display labels save - save new disk/partition definitions inquiry - show vendor, product and revision scsi - independent SCSI mode selects cache - enable, disable or query SCSI disk cache volname - set 8-character volume name !<cmd> - execute <cmd>, then return quit format> partition PARTITION MENU: 0 - change `0' partition 1 - change `1' partition 2 - change `2' partition 3 - change `3' partition 4 - change `4' partition 5 - change `5' partition 6 - change `6' partition 7 - change `7' partition 9 - change `9' partition select - select a predefined table modify - modify a predefined partition table name - name the current table print - display the current table label - write partition map and label to the disk !<cmd> - execute <cmd>, then return quit partition> print Current partition table (original): Total disk cylinders available: 977 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 unassigned wm 0 0 (0/0/0) 0 1 unassigned wm 0 0 (0/0/0) 0 2 backup wu 0 - 976 1.91GB (977/0/0) 4001792 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0 8 boot wu 0 - 0 2.00MB (1/0/0) 4096 9 unassigned wm 0 0 (0/0/0) 0 partition> 0 Part Tag Flag Cylinders Size Blocks 0 unassigned wm 0 0 (0/0/0) 0 Enter partition id tag[unassigned]: root Enter partition permission flags[wm]: wm Enter new starting cyl[1]: 1 Enter partition size[0b, 0c, 1e, 0.00mb, 0.00gb]: 1.5gb partition> print Current partition table (unnamed): Total disk cylinders available: 977 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 root wm 1 - 768 1.50GB (768/0/0) 3145728 1 unassigned wm 0 0 (0/0/0) 0 2 backup wu 0 - 976 1.91GB (977/0/0) 4001792 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0 8 boot wu 0 - 0 2.00MB (1/0/0) 4096 9 unassigned wm 0 0 (0/0/0) 0 partition> 1 Part Tag Flag Cylinders Size Blocks 1 unassigned wm 0 0 (0/0/0) 0 Enter partition id tag[unassigned]: home Enter partition permission flags[wm]: wm Enter new starting cyl[1]: 769 Enter partition size[4096b, 1c, 769e, 2.00mb, 0.00gb]: 976e partition> print Current partition table (unnamed): Total disk cylinders available: 977 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 root wm 1 - 768 1.50GB (768/0/0) 3145728 1 home wm 769 - 976 416.00MB (208/0/0) 851968 2 backup wu 0 - 976 1.91GB (977/0/0) 4001792 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0 8 boot wu 0 - 0 2.00MB (1/0/0) 4096 9 unassigned wm 0 0 (0/0/0) 0 partition> label [0] SMI Label [1] EFI Label Specify Label type[0]: 0 Ready to label disk, continue? y partition> quit FORMAT MENU: disk - select a disk type - select (define) a disk type partition - select (define) a partition table current - describe the current disk format - format and analyze the disk fdisk - run the fdisk program repair - repair a defective sector label - write label to the disk analyze - surface analysis defect - defect list management backup - search for backup labels verify - read and display labels save - save new disk/partition definitions inquiry - show vendor, product and revision scsi - independent SCSI mode selects cache - enable, disable or query SCSI disk cache volname - set 8-character volume name !<cmd> - execute <cmd>, then return quit format> quit
- 格式化 FAT32 的分割
- 格式化並且將 OpenSoarlis 的 ISO 檔案複製進來,這樣可以隨時將它分享給別人:
root@X-Wing:~ # mkfs -F pcfs -o fat=32,b=Data /dev/rdsk/c3t0d0p0:c 在 /dev/rdsk/c3t0d0p0:c 上建構新的 FAT 檔案系統:(y/n)?y root@X-Wing:~ # mount -F pcfs /dev/dsk/c3t0d0p1 /mnt root@X-Wing:~ # df -h /mnt 檔案系統 大小 用過 可用 容量 裝載至 /dev/dsk/c3t0d0p1 1.9G 0K 1.9G 1% /mnt root@X-Wing:~ # cp -p /moon/ISOs/osol-1002-121-x86.iso /mnt root@X-Wing:~ # df -h /mnt 檔案系統 大小 用過 可用 容量 裝載至 /dev/dsk/c3t0d0p1 1.9G 741M 1.2G 38% /mnt root@X-Wing:~ # umount /mnt
- 建立 ZFS 的儲存池
- 使用 ZFS 的指令建立一個名叫 venus 的儲存池:
root@X-Wing:~ # zpool create -f venus c3t0d0s1 root@X-Wing:~ # zpool list venus NAME SIZE USED AVAIL CAP HEALTH ALTROOT venus 408M 76.5K 408M 0% ONLINE - root@X-Wing:~ # zpool export venus
- 修改 /usr/bin/usbcopy 檔案
- 針對原版的 usbcopy 做了以下幾個修改:
- - 由於 usbcopy 在 zh_TW.UTF-8 的 locale 無法正常執行(在複製影像檔的程式段會有問題),因此加入語言環境變數的設定。
- - 說明會將姆指碟的 Solaris 分割中的切片0覆寫
- - 不執行劃分磁區分割
- - 不執行劃分磁區切片
- - 增加擴大 UFS 檔案系統的動作
- 以下為原始版本(/usr/bin/usbcopy)及修改版本(/usr/bin/usbcopy.s0)的差異:
root@X-Wing:~ # diff /usr/bin/usbcopy /usr/bin/usbcopy.s0; 25a26,29 > # Make sure we get the right locale environment > LANG=C; export LANG > LC_ALL=C; export LC_ALL > 122c126 < echo WARNING: All data on your USB storage will be lost. --- > echo WARNING: All data on your USB storage\'s Solaris partition slice 0 will be lost. 151,152c155,156 < # Install fdisk table with Solaris using entire disk, default VTOC < fdisk -B $dev --- > # # Install fdisk table with Solaris using entire disk, default VTOC > # fdisk -B $dev 154,169c158,173 < # Now create root partition. We want to find number of cylinders in backup < # partition from label created by fdisk -B and then generate root partition < # using whole disk minus cylinder 1 < acyls=$(prtvtoc $dev | awk '/accessible/{print $2}') < cyls=$((acyls - 1)) < format -e $dev >/dev/null <<EOF < partition < 0 < root < wm < 1 < ${cyls}c < label < 0 < y < EOF --- > # # Now create root partition. We want to find number of cylinders in backup > # # partition from label created by fdisk -B and then generate root partition > # # using whole disk minus cylinder 1 > # acyls=$(prtvtoc $dev | awk '/accessible/{print $2}') > # cyls=$((acyls - 1)) > # format -e $dev >/dev/null <<EOF > # partition > # 0 > # root > # wm > # 1 > # ${cyls}c > # label > # 0 > # y > # EOF 223a228,230 > # Resize the UFS filesystem to the allocated slice size > /usr/sbin/growfs $s0cdev >
- 複製 USB 影像檔到姆指碟
- 利用以下指令將 USB 影像檔複製到姆指碟:
root@X-Wing:~ # usbcopy.s0 /moon/ISOs/osol-1002-121-x86.usb Found the following USB devices: 0: /dev/rdsk/c3t0d0p0 4.0 GB USB Flash Disk 5.00 Enter the number of your choice: 0 WARNING: All data on your USB storage's Solaris partition slice 0 will be lost. Are you sure you want to install to USB Flash Disk 5.00, 4000 MB at /dev/dsk/c3t0d0p0 ? (y/n) y Copying and verifying image to USB device Finished 889 MB in 182 seconds (4.8MB/s) 0 block(s) re-written due to verification failure Warning: 72 sector(s) in last cylinder unallocated /dev/rdsk/c3t0d0s0: 3145728 sectors in 5243 cylinders of 1 tracks, 600 sectors 1536.0MB in 328 cyl groups (16 c/g, 4.69MB/g, 2240 i/g) super-block backups (for fsck -F ufs -o b=#) at: 32, 9632, 19232, 28832, 38432, 48032, 57632, 67232, 76832, 86432, Initializing cylinder groups: ...... super-block backups for last 10 cylinder groups at: 3052832, 3062432, 3072032, 3081632, 3091232, 3100832, 3110432, 3120032, 3129632, 3139232 Installing grub to USB device /dev/rdsk/c3t0d0s0 Completed copy to USB
- 結語
- 終於製作好了!那?就用它來開機咯。當然您也可以發揮更多的創意..
全站熱搜
留言列表