close

『雲端』與『姆指電』-自行製作 OpenSolaris 開機姆指碟

 

    1. 前言

      一個可能在 Run PC 出現的問答-PC Run OpenSolaris:


      問:請問 OpenSolaris 在 PC 上也可以 Run 嗎?


      答:其實在 PC 上可以 Run 的作業系統有很多。大家都熟知的 Windows 當然是一種, Linux 當然也是一種,另外像 Solaris/OpenSolaris 其實也可以在 PC 上 RUN。 OpenSolaris 是一個像 Linux 一樣開放原始碼的作業系統。它也和 Linux 一樣提供有 LiveCD 或 LiveUSB 可以用光碟或 USB 開機。
如果在姆指碟有開機的作業系統及儲存資料的空間,找到一台支援 USB 開機的 PC,您馬上可以有台比『小筆電』還炫的『姆指電』。
       配合未來的『雲端』環境,以後網咖只要提供『姆指電』的插槽,每個使用者都可以有個人開機的環境及『本地』和『雲端』的儲存空間。


      說到『雲端』與『姆指電』,今天是記者節,很幸運有機會訪問到 Chao-Chin Hung 大大。 Chao-Chin Hung 大大對『姆指電』可是研究了一段時間。不過因為我不是記者,因此您會看到的是我整理後的筆記而不是一問一答實況報導的訪問記錄。有那麼一點點抱歉...


      以下是採訪 Chao-Chin Hung 大大的記實:


    1. 空間規劃使用

      我們的計劃是在姆指碟上有一個區域是用來存放開機用的 Live USB 影像,另外有兩個區域是 ZFS 及 FAT32 用來存放資料。基於一些可能的限制,我們將 FAT32 放在第一個分割。在姆指碟上分成兩個分割(Partition),分別是 FAT32 及 Soalris 2。在 Solaris2 中再分為兩個切片(Slice),分別為 UFS 及 ZFS 的檔案系統。其中切片 0 使用 UFS 檔案系統,而切片 1 使用 ZFS 檔案系統。 


MBR

P1: FAT32

P2: Solaris 2

S0: UFS, Live USB

S1: ZFS, Home


      對於空間大小的規劃則為:Live USB 1.5GB,ZFS 0.5GB,其餘的則保留給 FAT32。


    1. 取得適當的 USB 影像檔
      1. 直接下載,目前 OpenSolaris 的安裝下載網址通常都提供了 ISO 及 USB 兩種格式的選擇。
      2. 自行製作,這個部份也許下次有機會採訪 Chao-Chin Hung 大大時再報導。

      可以使用以下幾種方式取得姆指碟的影像檔:



    1. 安裝複製 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---
            
    1. 確認姆指碟運作正常

      在將 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: 媒體沒有寫入保護。
            
    1. 檢查目前的磁碟分割方式

      使用 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
            
      記錄下來一個磁柱的大小(有多少個區塊)。


    1. 檢查是否掛載此一姆指碟

      確認目前並無掛載此一姆指碟上的分割或切片,若有則進行卸載:

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
            
    1. 清除姆指碟

      清除姆指碟的第一個磁柱:

root@X-Wing:~ # dd if=/dev/zero of=/dev/rdsk/c3t0d0p0 bs=512 count=16065
進來 16065+0 個記錄
出去 16065+0 個記錄
            
    1. 劃分磁區分割

      參考以下程序劃出 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
            
    1. 劃分磁區切片

      參考以下程序劃出切片(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
            
    1. 格式化 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
            
    1. 建立 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
            
    1. 修改 /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
>
            
    1. 複製 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
            
    1. 結語

      終於製作好了!那?就用它來開機咯。當然您也可以發揮更多的創意..
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 小宇哥 的頭像
    小宇哥

    小宇哥的CS學習筆記

    小宇哥 發表在 痞客邦 留言(0) 人氣()