How to build grub 0.97 on Ubuntu 904

1. Download grub-0.97.tar.gz
ftp://alpha.gnu.org/gnu/grub

2. Update grub-0.97 source code

Start by applying the following patch to allow for better drive detection, fix some GCC 4.x issues, and provide better SATA support for some disk controllers:

$patch -Np1 -i ../grub-0.97-disk_geometry-1.patch

By default, GRUB doesn't support ext2 filesystems with 256-byte inodes. Fix this by applying the following patch:


$patch -Np1 -i ../grub-0.97-256byte_inode-1.patch

2.
$./configure --prefix=/home/gary/XXX
$make
$make install

Ref:

重建 GRUB 的步驟

如何重建 GRUB 的步驟如下:

  • 使用原來的 linux 安裝光碟開機。現代的系統都是 live-cd,即開機光碟 boot 完就是可操作的系統。
  • 開一個終端機程式,可以輸入命令。
  • 執行 sudo grub,回答密碼。
  • grub> find /boot/grub/stage1,它會找原來裝 GRUB 的硬碟分區,例如 (hd1,0),即第二個硬碟的第一個分區。
  • grub> root (hd1,0),告訴它 linux root 在哪裡。
  • grub> setup (hd0),安裝 GRUB 在第一個硬碟的 MBR (Master Boot Record)。把 Windows 的 bootloader 蓋掉… 之後可以在 GRUB menu 中加入進 Windows 系統的選項,本文不討論這個。
  • grub> quit,結束,這樣就完成 GRUB rebuild,可以 reboot 了。

另一作法是把 GRUB 安裝在硬碟分區裡,例如 grub> setup (hd1,0),安裝 GRUB 在第二個硬碟的第一個分區,而不是 MBR。這種方法可以使用 Windows 的 boot loader 來作 dual system 啟動,我就是這麼作的,下回再來介紹。

How to clear partition table !!

清空 partition table
dd count=1 < /dev/zero > /dev/sdz

[轉貼]【教學】MBR 主啟動磁區剖析

MBR (Master Boot Record) 主啟動磁區剖析

--------------------------------------------------------------------------------

了解開機流程:

在 IBM PC 相容系統上,電腦開機時第一個被執行的程式即是所謂的 BIOS (Basic Input/Output System),BIOS 指的其實是一顆 ROM IC (Read-Only Memory 唯讀記憶體 ), 堶捫N錄了提供電腦基本操作的服務程式,這種儲存於唯讀記憶體中的程式稱之為 Firmware (韌体)。

當 BIOS 開始執行時, 首先會對系統進行自我檢測 (POST, Power-On Self Test) 以確定硬體設備可以正常動作,當開機自我檢測結束時 BIOS 將嘗試讀入軟碟的第一個磁區 (Boot Sector 啟動磁區)。若沒有軟磁則嘗試讀入硬碟的第一個磁區 (Master Boot Record 主啟動磁區,一般簡稱 MBR) 。 MBR 將會被戴入到記憶體 0000:7C00 的位置開始執行,而後再戴入由作業系統提供的開機磁區( Boot Sector ),進入作業系統。
PS. 新的 BIOS 可以改變開機順序不由軟碟啟動,可以從直接硬碟啟動、光碟啟動、甚至由 USB 設備啟動。

在標準狀況下:

電腦開機→BIOS→POST→軟碟啟動磁區→硬碟主啟動磁區(MBR)->Boot Sector->OS


--------------------------------------------------------------------------------

MBR 結構:

MBR 指的是硬碟機最開頭的第一個磁區,位於硬碟第 0 面,第 0 軌,第 1 磁區的位置。每個磁區為 512 Bytes。

我們可以透過 BIOS 提供的 INT 13h 中斷服務常式來讀寫 MBR 磁區,如:

語法:
    MOV AX,0201h     MOV BX,200h     MOV CX,0001h     MOV DX,0080h     INT 13h 
這段程式可以將 MBR 磁區戴入到記憶體 200h 的位置。

MBR 磁區大致上分為 3 個區域

語法:
----------------------------  <-- 位移值 00H (0 Bytes) |                          | |                          | | Boot Partition Loader    | | 這一小段程式用來將可啟動 | | 的作業系統分割區戴入     | |                          | |                          | |                     -----|  <-- 位移值 1BEh (446 Bytes) |---------------------|    | | Partition Table          | | 硬碟分割表          -----| |                     |55AA| ----------------------------  <-- 位移值 200H (512 Bytes) 
1. 第一個區域是程式區,稱為 Boot Partition Loader, 也有人稱為 Pre-Loader 或 Pre-Boot。這一段小程式用來將可啟動的作業系統分割區戴入 (應該說戴入可啟動作業系統分割區的啟動磁區 Boot Sector),並將控制權交給啟動磁區。其範圍從 000h 到 1BDh,共 446 Bytes。
因為這段程式區是除了 BIOS 之外最先被電腦戴入執行的區域 (不考慮軟碟),所以像是多重開機管理程式、開機型病毒、軟體式硬碟密碼鎖等程式,大多都是利用這個域區在工作。

2. 第二個區域是資料區,即硬碟分割表所在區域。其範圍從 1BEh 到 1FDh,共 64 Bytes。
這 64 Bytes 又劃分成四個區域,代表 4 個硬碟分割表,其範圍分別為

語法:
位移值 01BE ~ 01CD  <-- 第一分割表 
位移值 01CE ~ 01DD  <-- 第二分割表 
位移值 01DE ~ 01ED  <-- 第三分割表 
位移值 01EE ~ 01FD  <-- 第四分割表 
因為硬碟分割表區域容量只有 64 Bytes,只能切成 4 個分割表,這也是為什麼在使用 FDISK 時最多只能切出 4 個主分割 (Parmary Partition) 的原因 (擴充分割 Extended 也算是主分割的一種)。
也因為 MBR 磁區位置固定在硬碟第 0 面,第 0 軌,第 1 磁區的位置,萬一不幸硬碟機第 0 軌 (指 MBR)發生實體損壞時,這顆硬碟就報癈了。即使硬碟機其它磁軌都是好的也是一樣,原因當然就是因為作業系統讀不到 Partition Table 的關係。

3. 第三個區域只有 2 個 Bytes,位移值 1FE 固定 55h,位移值 1FF 則固定為 AAh。
沒什麼太特殊的意義,55AA 只是讓 BPL 程式用來驗証是否為 MBR 磁區而已。

一個完整的 MBR 磁區範例如下:

語法:
紅色部份為程式區 藍色部份為第一分割表 綠色部份為第二分割表 桃紅色部份為第三分割表 紫色部份為第四分割表 亮綠色部份為MBR標記  
0000:7C00  33 C0 8E D0 BC 00 7C FB-50 07 50 1F FC BE 1B 7C   3.....|.P.P....| 0000:7C10  BF 1B 06 50 57 B9 E5 01-F3 A4 CB BD BE 07 B1 04   ...PW...........  0000:7C20  38 6E 00 7C 09 75 13 83-C5 10 E2 F4 CD 18 8B F5   8n.|.u..........  0000:7C30  83 C6 10 49 74 19 38 2C-74 F6 A0 B5 07 B4 07 8B   ...It.8,t.......  0000:7C40  F0 AC 3C 00 74 FC BB 07-00 B4 0E CD 10 EB F2 88   ..<.t........... 0000:7C50  4E 10 E8 46 00 73 2A FE-46 10 80 7E 04 0B 74 0B   N..F.s*.F..~..t. 0000:7C60  80 7E 04 0C 74 05 A0 B6-07 75 D2 80 46 02 06 83   .~..t....u..F... 0000:7C70  46 08 06 83 56 0A 00 E8-21 00 73 05 A0 B6 07 EB   F...V...!.s..... 0000:7C80  BC 81 3E FE 7D 55 AA 74-0B 80 7E 10 00 74 C8 A0   ..>.}U.t..~..t.. 0000:7C90  B7 07 EB A9 8B FC 1E 57-8B F5 CB BF 05 00 8A 56   .......W.......V 0000:7CA0  00 B4 08 CD 13 72 23 8A-C1 24 3F 98 8A DE 8A FC   .....r#..$?..... 0000:7CB0  43 F7 E3 8B D1 86 D6 B1-06 D2 EE 42 F7 E2 39 56   C..........B..9V 0000:7CC0  0A 77 23 72 05 39 46 08-73 1C B8 01 02 BB 00 7C   .w#r.9F.s......| 0000:7CD0  8B 4E 02 8B 56 00 CD 13-73 51 4F 74 4E 32 E4 8A   .N..V...sQOtN2.. 0000:7CE0  56 00 CD 13 EB E4 8A 56-00 60 BB AA 55 B4 41 CD   V......V.`..U.A. 0000:7CF0  13 72 36 81 FB 55 AA 75-30 F6 C1 01 74 2B 61 60   .r6..U.u0...t+a` 0000:7D00  6A 00 6A 00 FF 76 0A FF-76 08 6A 00 68 00 7C 6A   j.j..v..v.j.h.|j 0000:7D10  01 6A 10 B4 42 8B F4 CD-13 61 61 73 0E 4F 74 0B   .j..B....aas.Ot. 0000:7D20  32 E4 8A 56 00 CD 13 EB-D6 61 F9 C3 49 6E 76 61   2..V.....a..Inva 0000:7D30  6C 69 64 20 70 61 72 74-69 74 69 6F 6E 20 74 61   lid partition ta 0000:7D40  62 6C 65 00 45 72 72 6F-72 20 6C 6F 61 64 69 6E   ble.Error loadin 0000:7D50  67 20 6F 70 65 72 61 74-69 6E 67 20 73 79 73 74   g operating syst 0000:7D60  65 6D 00 4D 69 73 73 69-6E 67 20 6F 70 65 72 61   em.Missing opera 0000:7D70  74 69 6E 67 20 73 79 73-74 65 6D 00 00 00 00 00   ting system..... 0000:7D80  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................ 0000:7D90  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................ 0000:7DA0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................ 0000:7DB0  00 00 00 00 00 2C 44 63-01 00 00 00 72 20 80 01 .....,Dc....r .. 0000:7DC0  01 00 0B EF BF 1D 3F 00-00 00 A1 0B 7D 00 00 00 ......?.....}... 0000:7DD0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:7DE0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:7DF0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U. 

--------------------------------------------------------------------------------

硬碟分割表的格式:

每個分表佔 16 Bytes, 其意義如下:

語法:
---------------------------------------------------------------------------- |位移值|大小 | 說明                                                        | +------+-------------------------------------------------------------------+ |  00  |Byte | BOOT ID - 若為可開機的分割區則為 80h ~ FFh, 否則為 00h。    | |      |     | 80h = C, 81h = D, 82h = E ... 以此類推                      | |      |     | 以 fdisk 來說,若第一顆硬碟的分割區設為 Active 則 ID = 80h。 | |      |     | 4 個分割表中, 只能有一個被設為可開機, 否則將會發生錯誤。    | +------+-----+-------------------------------------------------------------+ |  01h |Byte | 此分割開始之磁頭編號                                        | +------+-----+-------------------------------------------------------------+ |  02h |Byte | 此分割開始之磁區編號 (6 bits)                               | |      |     | 最高的 2 個 bits(bit6-7), 為磁柱編號的 bit8-9             | +------+-----+-------------------------------------------------------------+ |  03h |Byte | 此分割開始之磁柱編號 (10 bits)                              | |      |     | bit8-9 放在位移值 02h 的 bit 6-7                            | +------+-----+-------------------------------------------------------------+ |  04h |Byte | 作業系統識別碼                                              | |      |     |   00 None                                                   | |      |     |   01 DOS FAT-12 bits                                        | |      |     |   02 XENIX root                                             | |      |     |   03 XENIX usr                                              | |      |     |   04 DOS FAT-16 bits <> 32M                                  | |      |     |   07 HPFS/NTFS                                              | |      |     |   08 AIX                                                    | |      |     |   09 AIX bootable                                           | |      |     |   0A OS/2 Boot Manager                                      | |      |     |   0B DOS FAT-32 bits (Int 13h extensions)                    | |      |     |   0C DOS FAT Cylinder > 1024 (Int 13h extensions)            | |      |     |   0E DOS FAT System (Int 13h extensions)                     | |      |     |   0F DOS BigExtended (Int 13h extensions)                    | |      |     |   20 SPF Boot manager                                       | |      |     |   40 Venix 80286                                            | |      |     |   41 PPC PReP Boot                                          | |      |     |   51 Novell                                                 | |      |     |   52 Microport                                              | |      |     |   63 GNU HURD                                               | |      |     |   64 Novell Netware                                         | |      |     |   65 Novell Netware                                         | |      |     |   75 PC/IX                                                  | |      |     |   80 Old MINIX                                              | |      |     |   81 Linux/MINIX                                            | |      |     |   82 Linux swap                                             | |      |     |   83 Linux native                                           | |      |     |   85 Linux extended                                         | |      |     |   93 Amoeba                                                 | |      |     |   94 Amoeba BBT                                             | |      |     |   A5 FreeBSD                                                | |      |     |   A6 Open BSD                                               | |      |     |   A7 NETSTEP                                                | |      |     |   A9 NetBSD                                                 | |      |     |   B7 BSDI fs                                                | |      |     |   B8 BSDI swap                                              | |      |     |   C7 Syrinx                                                 | |      |     |   DB CP/M                                                   | |      |     |   E1 DOS access                                             | |      |     |   E3 DOS R/O                                                | |      |     |   EB BeOS fs                                                | |      |     |   F2 DOS secondary                                          | |      |     |   FF BBT                                                    | +------+-----+-------------------------------------------------------------+ |  05h |Byte | 此分割結束之磁頭編號                                        | +------+-----+-------------------------------------------------------------+ |  06h |Byte | 此分割結束之磁區編號 (6 bits)                               | |      |     | 最高的 2 個 bits(bit6-7), 為磁柱編號的 bit8-9             | +------+-----+-------------------------------------------------------------+ |  07h |Byte | 此分割結束之磁柱編號 (10 bits)                              | |      |     | bit8-9 放在位移值 06h 的 bit 6-7                            | +------+-----+-------------------------------------------------------------+ |  08h |DWord| 此分割區前之磁區總數                                        | +------+-----+-------------------------------------------------------------+ |  12h |DWord| 此分割之磁區總數                                            | +------+-----+-------------------------------------------------------------+ 

--------------------------------------------------------------------------------

FDISK /MBR 的作用:

Windows/DOS 作業系統提供的硬碟分割程式有一個隱藏參數 /mbr,許多人以為只要下 Fdisk /mbr 就可以重建硬碟分割表,其實這是錯誤的!Fdisk /mbr 主要功用在幫你重建 BPL (Boot Partition Loader),也就是 Fdisk 只會幫你重建程式區而已,如果硬碟分割表已經毀損 Fdisk /mbr 就沒用了。
也因為 /mbr 的功用在重建 BPL 程式區,而許多的多重開機管理程式或開機型病毒也是利用這區域在工作,所以執行 Fdisk /mbr 可能可以移除多重開機管理程式或開機型病毒。


--------------------------------------------------------------------------------

Boot Partition Loader 程式說明 (WinXP):

;首先要知道BIOS結束自我測試後,會將MBR戴入至記憶體0000:7C00位置,然後開始執行MBR程式區的程式
;為何會固定將 MBR 戴入至記憶體0000:7C00的位置呢? 沒什麼特別原因, 只因為以前 IBM 出的 x86 系統的 BIOS
;就是這麼做的, 所以後來大家都跟隨 IBM 的做法..

;MBR 程式第一部份
;設定堆疊並將MBR程式從 0000:7C00h 複製到 0000:0600h 位置
;
;將程式碼由 0000:7C00h 複製到 0000:0600h 的原因在於
;後續戴入的啟動磁動(Boot Secotr), 也必需被戴入到 0000:7C00h 的位址,
;如果沒進行搬移的動作, 將造成在記憶中的 MBR 程式被覆蓋, 造成當機

語法:
0000:7C00 33C0          XOR AX,AX 0000:7C02 8ED0          MOV SS,AX 0000:7C04 BC007C        MOV SP,7C00  ; 設定堆疊 SS:SP (0000:7C00) 0000:7C07 FB            STI 0000:7C08 50            PUSH AX 0000:7C09 07            POP ES 0000:7C0A 50            PUSH AX 0000:7C0B 1F            POP DS  ; DS = ES = AX = 0 0000:7C0C FC            CLD 0000:7C0D BE1B7C        MOV SI,7C1B 0000:7C10 BF1B06        MOV DI,061B 0000:7C13 50            PUSH AX  ; AX = 0000 0000:7C14 57            PUSH DI  ; DI = 061B 0000:7C15 B9E501        MOV CX,01E5 0000:7C18 F3 A4       REPZ MOVSB  ; 將第二部份的程式與硬碟分割表複製到記憶體 0000:061Bh 位置 0000:7C1A CB            RETF  ; 跳到新位置繼續執行, 也就是       ; MBR 程式的第二部份起始點 (0000:061B)  ;MBR 程式第二部份 0000:7C1B BDBE07        MOV BP,07BE  ; BP = 07BEh = 第一個硬碟分割表位址 0000:7C1E B104          MOV CL,04  ; CL = 4, 最多共有 4 組

備份MBR與partition table

dd if=/dev/hda of=/path/name.mbr count=1 bs=512 /*------------備份------------*/
備份MBR與partition table:
$dd if=/dev/hda of=/path/name.mbr count=1 bs=512


/*------------還原------------*/

還原mbr與partition table:
# dd if=/path/name.mbr of=/dev/hda

指令cpio備忘

備份
Server:~ # find /home/csliu | cpio -o > /root/csliu.cpio
Server:~ # find /home/csliu | cpio -oF /root/csliu.cpio

查看
Server:~ # cpio -t < style="letter-spacing: 0px; ">Server:~ # cpio -tF csliu.cpio

還原
Server:~ # cpio –i < style="letter-spacing: 0px; ">Server:~ # cpio -iF csliu.cpio

VBox share folder setting

* 客端作業系統為Windows時:當你在功能表列上選取裝置→安裝客端額外功能,他就會開始安裝,直到結束。他就會將相關的虛擬驅動程式安裝完成,定打開主客間很重要的資料夾分享的功能,在使用手冊上說明你可以在命令提示字元上輸入net use x: \\vboxsvr\sharename其中”x”代表網路磁碟機的代號,你可以自選,”sharename”為你自己所設定的分享資料夾的名字,但或許你可利用檔案管理員上得的工具→連線網路磁碟機上去做選擇可能會容易一些。

* 客端作業系統為Linux時:在功能表列上選取和按下裝置→安裝客端額外功能後,就會掛載上一個虛擬光碟,然後利用root的權限執行VBoxLinuxAdditions.run,就會將額外的功能來開啟。而在主客間的資料夾分享功能,在使用手冊上說明是mount -t vboxsf [-o OPTIONS] sharename mountpoint,其中”sharename”是你自訂分享資料夾的名字,”mountpoint”是在linux裡所要掛載對應的資料夾位置,例如: /mnt/share,而在/mnt下的”share”目錄夾,你可要用root的身份去自己建立,所以你也可以自行去命名,所以自行可用如”sudo mount -t vboxsf myz /mnt/zd“。

cpio + gzip

壓縮
$find folder1 | cpio -ocvB | gzip > folder1.cpio.gz
$dd if=/dev/sdan bs=4096 conv=notrunc,noerror | gzip > /path/image.gz
解壓縮
$gzip -dc folder1.cpio.gz | cpio -idv
$gzip -dc /path/image.gz | dd of=/dev/sdan bs=4096 conv=notrunc,noerror

昨天轉貼了一篇將Ubuntu 6.10 Edgy放進我們的隨身碟裡,但是那個方法有些麻煩,因為還要是下載一個 USBEdgy.zip的檔案,而這個檔案也蠻大的,也有六百多M,若是只要利用原本下載的ISO檔那不是頂好的,那就用昨天所講可能的第三種方式來安裝,這個方式的流程幾乎是一樣的,只是我們今天用的是Ubuntu 7.04 Feisty Fawn 這個新的版本,安裝步驟參考Pen Drive Linux網站的網頁USB Ubuntu 6.10 Edgy install,我們先打下載回來的ubuntu-7.04-desktop-i386.iso這個ISO檔解開(可用poweriso、winrar等可以解開ISO檔的工具都行)到我們自己新增名為ubuntu的目錄夾內和到Pen Drive Linux網站的開網頁內下載一個檔案fixu.zip(約2K)和解開將裡面的兩個syslinux.cfg 和fixu.bat這個批次檔放進剛才我們自己設的ubuntu目錄夾內,並點擊fixu.bat這個批次檔,按照螢幕所是執行就可以了。其他的步驟和昨天這篇將Ubuntu Linux 作業系統放進我們的隨身碟裡---我的隨身儲存工具及使用---軟體幾乎一樣。這裡就在重新整理一次。利用虛擬作業系統載入ubuntu-7.04-desktop-i386.iso檔執行,進到Ubuntu Linux作業系統裡,開啟終端機程式,其他步驟如下 :

首先看看USB隨身碟有多少partition
sudo fdisk -l

再來把這些partition全部 umount (退出)
sudo umount /dev/sdaX (X就代入你的分割區代號)

然後就是重新分割USB啦
sudo fdisk /dev/sda

將原本隨身碟內的partition刪除,然後新建一個FAT16和一個Linux的partition,FAT16這個partition至少要707MB,因為先前我們自己新增的ubuntu目錄夾和一些動作後的大小大概要那麼大,所以給partition 1(FAT16)約750MB的空間(+750M),其他的就給Linux的partition。

再來就是格式化partition
sudo mkfs.vfat -F 16 -n USB /dev/sdb1 或 sudo mkfs.vfat -F 32 -n USB /dev/sdb1

sudo mkfs.ext2 -b 4096 -L casper-rw /dev/sdx2

當格式化完後,移除我們的隨身碟,然後再重新插入我們的隨身碟,將會看到 USB 和 casper-rw 這兩個partition出現。

然後把開機需要的syslinux也灌進USB裡面,做這個之前要先裝syslinux和mtools
sudo apt-get install syslinux mtools

再來安裝syslinux
syslinux -sf /dev/sda1

最後就是把ubuntu目錄夾內的檔案全部移到 USB (也就是FAT16這個磁區內)裡去,重新開機,進到BIOS內把開機順序改由USB設備或該隨身碟為先,儲存後再重開機,當啟動進入Ubuntu的開機選單按F2選擇你要的語言,然後再選擇 "USB",就可以了。

附記 :

上一篇貼文 :將Ubuntu Linux 作業系統放進我們的隨身碟裡---我的隨身儲存工具及使用---軟體。

Powered by Zoundry

[轉載] Build xPUD with mkxpud

Build xPUD with mkxpud

This is a brief how-to on building xPUD with Ubuntu 9.04.

Download Rootfs and Modules

$ wget http://download.xpud.org/devel/jaunty-rootfs.tgz $ mkdir jaunty-xpud $ sudo tar zxvf jaunty-rootfs.tgz -C jaunty-xpud/ 

Internet connection inside build system

$ sudo chroot jaunty-xpud/rootfs/ mkdir -p /proc/net/dev/ $ sudo chroot jaunty-xpud/rootfs/ dhclient 

Upgrade and Setting

$ sudo cp /etc/hosts jaunty-xpud/rootfs/etc/hosts $ sudo chroot jaunty-xpud/rootfs/ apt-get update $ sudo chroot jaunty-xpud/rootfs/ apt-get upgrade 

Export mkxpud from Repository

$ sudo git clone git://github.com/penk/mkxpud.git jaunty-xpud/rootfs/mkxpud $ find jaunty-xpud/rootfs/mkxpud -name .git* -exec rm -rf {} \; 

Build the xPUD Rootfs

$ sudo chroot jaunty-xpud/rootfs/ $ cd mkxpud/ $ ./tools/mkxpud all 

That’s it, the default cookbook will work. :-)

Bonus: Creating Image

if you’re looking for a way to combine the kernel and rootfs, download the linux-source, and edit .config to find this line:

CONFIG_INITRAMFS_SOURCE="/home/penk/snap-mkxpud/deploy/default/rootfs.cpio" 

replace it with your absolute path pointing to the rootfs.cpio just created, then:
$ make bzImage 

after compiling, the file will be put under arch/x86/boot/bzImage.

Build xPUD with mkxpud

This is a brief how-to on building xPUD with Ubuntu 9.04.

Step1:

虹光大成就-密教灌頂(一)