從 MBR boot code (440 bytes) 探索 Ubuntu 無法開機的問題 [論壇 - Ubuntu安裝問題]
正在瀏覽:
1 名遊客
從 MBR boot code (440 bytes) 探索 Ubuntu 無法開機的問題 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員一級
![]() ![]() 註冊日期:
2015/5/2 16:19 所屬群組:
已註冊使用者 等級: 4
HP : 0 / 75
![]() |
從 MBR boot code (440 bytes) 探索 Ubuntu 無法開機的問題
前提:我是把 Ubuntu 系統,安裝在 MBR 格式的開機碟。 (請注意:不是 GPT 格式的開機碟) 最近在實體電腦及虛擬機器,安裝了很多次的 Ubuntu 14.04.1 系統。 我習慣用 GParted 先分割好硬碟。(或是在 Ubuntu 安裝程式中,直接手動分割硬碟。) 然後安裝 Ubuntu 系統時,選擇把 grub 安裝在 / 分割區(包含/boot)中。 可是我發現有個奇怪的現象: 有的分割區安裝 Ubuntu 系統後,開機可以啟動系統。 有的分割區安裝 Ubuntu 系統後,開機無法啟動系統。 一開始不知道原因,還以為是 Ubuntu 有 Bug 問題。 後來偶然發現,開機能不能成功啟動系統,似乎與分割區的起始位置有關。 (不能開機的分割區,起始的 CHS 值顯示為 0xFEFFFF) 我開始懷疑,是 MBR boot code (440 bytes) 的問題。 於是我到 Wikipedia 爬文(MBR/VBR): http://zh.wikipedia.org/zh-tw/MBR http://en.wikipedia.org/wiki/Master_boot_record http://en.wikipedia.org/wiki/Volume_boot_record 了解到: 1.傳統 CHS 無法表示大於 8032.5MB 的硬碟(分割區)。 2.這種情形,CHS值通常設為 0xFEFFFF,並加以忽略。 使用 parted (或 GParted 或 Ubuntu 安裝程式)分割硬碟,會在 MBR boot code (440 bytes) 寫入一個迷你的啟動程式。 我懷疑這個迷你的啟動程式,好像只能啟動 CHS 可以表示的分割區。 如果分割區的起始位置大於 8032.5MB 的話,可能就無法正常開機。 (無法引導安裝在分割區中的 grub 程式) 後來我發現 Ubuntu 14.04.1 安裝光碟中,有 syslinux 的 MBR boot code (440 bytes) 可以使用。 /usr/lib/syslinux/mbr.bin 於是我把 syslinux 的 mbr.bin 寫入無法開機的系統碟中: sudo dd if=/usr/lib/syslinux/mbr.bin of=/dev/sda bs=440 count=1 果然就可以正常開機啟動 Ubuntu 系統了。 初步結論: parted 的 MBR boot code 無法啟動(起始位置大於 8032.5MB 的分割區)。 syslinux 的 MBR boot code 可以啟動。 可能有人會說,如果一開始安裝 Ubuntu 系統時,選擇把 grub 安裝在 MBR 中,就不會遇到這個問題。 可是我認為功能強大的 grub 實在太肥了,遠遠超過 440 bytes,應該安裝在分割區中比較適合。 而且如果有安裝多重系統,例如安裝 Windows 7 時,MBR boot code (440 bytes) 也會被 Windows 覆蓋。 如果 grub 沒有安裝在 MBR 中的話,就不用擔心修復 grub 的問題。 只要把 syslinux 的 boot code 寫回到 MBR,然後把要啟動的分割區的 Flag 設為 boot 就可以了。 備註一:以上結論是我個人實測後的猜測,如果有不正確的地方,請各位指正。 (畢竟我不知道如何去解讀 MBR boot code 的內容) 備註二:如果有人會解讀 parted 或 syslinux 的 boot code 的話,請教教我! 如果 boot code 的原始碼是用 C 語言寫的話,我會一些。 如果 boot code 的原始碼是用 x86 組合語言寫的話,我不會,放棄。
2015/5/13 2:21
|
||||||||||
![]() |
回覆: 從 MBR boot code (440 bytes) 探索 Ubuntu 無法開機的問題 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員一級
![]() ![]() 註冊日期:
2015/5/2 16:19 所屬群組:
已註冊使用者 等級: 4
HP : 0 / 75
![]() |
## parted 的 MBR boot code 無法啟動以下四個主分割區(CHS=0xFEFFFF)
ubuntu@ubuntu:~$ sudo dd if=/dev/sda bs=512 count=1 2> /dev/null | hexdump -Cv -s 446 -n 64 000001be 80 fe ff ff 83 fe ff ff 00 00 00 01 00 00 00 01 |................| 000001ce 00 fe ff ff 83 fe ff ff 00 00 00 02 00 00 00 02 |................| 000001de 00 fe ff ff 83 fe ff ff 00 00 00 04 00 00 00 04 |................| 000001ee 00 fe ff ff 83 fe ff ff 00 00 00 08 00 00 00 08 |................| 000001fe ## parted 的 MBR boot code 如下:很迷你,功能陽春(CHS定址?),開機失敗無訊息提示。 ubuntu@ubuntu:~$ sudo dd if=/dev/sda bs=440 count=1 2> /dev/null | hexdump -Cv 00000000 fa b8 00 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |................| 00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..| 00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u| 00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..| 00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000000b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000000c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000000e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000000f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001b0 00 00 00 00 00 00 00 00 |........| 000001b8 ## syslinux 的 MBR boot code 如下:很好用,功能完整(LBA定址?),開機失敗有訊息提示。 ubuntu@ubuntu:~$ sudo dd if=/dev/sda bs=440 count=1 2> /dev/null | hexdump -Cv 00000000 33 c0 fa 8e d8 8e d0 bc 00 7c 89 e6 06 57 8e c0 |3........|...W..| 00000010 fb fc bf 00 06 b9 00 01 f3 a5 ea 1f 06 00 00 52 |...............R| 00000020 52 b4 41 bb aa 55 31 c9 30 f6 f9 cd 13 72 13 81 |R.A..U1.0....r..| 00000030 fb 55 aa 75 0d d1 e9 73 09 66 c7 06 8d 06 b4 42 |.U.u...s.f.....B| 00000040 eb 15 5a b4 08 cd 13 83 e1 3f 51 0f b6 c6 40 f7 |..Z......?Q...@.| 00000050 e1 52 50 66 31 c0 66 99 e8 66 00 e8 21 01 4d 69 |.RPf1.f..f..!.Mi| 00000060 73 73 69 6e 67 20 6f 70 65 72 61 74 69 6e 67 20 |ssing operating | 00000070 73 79 73 74 65 6d 2e 0d 0a 66 60 66 31 d2 bb 00 |system...f`f1...| 00000080 7c 66 52 66 50 06 53 6a 01 6a 10 89 e6 66 f7 36 ||fRfP.Sj.j...f.6| 00000090 f4 7b c0 e4 06 88 e1 88 c5 92 f6 36 f8 7b 88 c6 |.{.........6.{..| 000000a0 08 e1 41 b8 01 02 8a 16 fa 7b cd 13 8d 64 10 66 |..A......{...d.f| 000000b0 61 c3 e8 c4 ff be be 7d bf be 07 b9 20 00 f3 a5 |a......}.... ...| 000000c0 c3 66 60 89 e5 bb be 07 b9 04 00 31 c0 53 51 f6 |.f`........1.SQ.| 000000d0 07 80 74 03 40 89 de 83 c3 10 e2 f3 48 74 5b 79 |..t.@.......Ht[y| 000000e0 39 59 5b 8a 47 04 3c 0f 74 06 24 7f 3c 05 75 22 |9Y[.G.<.t.$.<.u"| 000000f0 66 8b 47 08 66 8b 56 14 66 01 d0 66 21 d2 75 03 |f.G.f.V.f..f!.u.| 00000100 66 89 c2 e8 ac ff 72 03 e8 b6 ff 66 8b 46 1c e8 |f.....r....f.F..| 00000110 a0 ff 83 c3 10 e2 cc 66 61 c3 e8 62 00 4d 75 6c |.......fa..b.Mul| 00000120 74 69 70 6c 65 20 61 63 74 69 76 65 20 70 61 72 |tiple active par| 00000130 74 69 74 69 6f 6e 73 2e 0d 0a 66 8b 44 08 66 03 |titions...f.D.f.| 00000140 46 1c 66 89 44 08 e8 30 ff 72 13 81 3e fe 7d 55 |F.f.D..0.r..>.}U| 00000150 aa 0f 85 06 ff bc fa 7b 5a 5f 07 fa ff e4 e8 1e |.......{Z_......| 00000160 00 4f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 |.Operating syste| 00000170 6d 20 6c 6f 61 64 20 65 72 72 6f 72 2e 0d 0a 5e |m load error...^| 00000180 ac b4 0e 8a 3e 62 04 b3 07 cd 10 3c 0a 75 f1 cd |....>b.....<.u..| 00000190 18 f4 eb fd 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001b0 00 00 00 00 00 00 00 00 |........| 000001b8
2015/5/13 2:22
|
||||||||||
![]() |
回覆: 從 MBR boot code (440 bytes) 探索 Ubuntu 無法開機的問題 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員三級
![]() ![]() 註冊日期:
2012/4/26 9:45 所屬群組:
已註冊使用者 等級: 12
HP : 0 / 293
![]() |
你可能需要硬碟分割規格的歷史資料,也許可以幫助你釐清CHS的問題。內有CHS、LBA與GPT的容量限制簡介。這跟資料存取範圍上限有關。
如何突破硬碟2.1TB的容量限制 如果你安裝的電腦是屬於舊電腦的話,可能需要檢查BIOS裡硬碟的設定參數,看是設定為CHS mode,還是設定成LBA mode,這有可能有差別。 舊電腦BIOS設定硬碟模式發問範例: 請問電腦BIOS的設定~ - Yahoo!奇摩知識+ 設錯了,格式化出來的格式會略有不同 - - 也就是,如果BIOS設CHS mode,而硬碟之前是用LBA mode格式化的,是會出現怪現象的。
2015/5/13 12:05
|
||||||||||
![]() |
回覆: 從 MBR boot code (440 bytes) 探索 Ubuntu 無法開機的問題 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
tmpfs 寫到: 我對上面這段話比較有興趣 ![]() 尤其下面這一句「grub 實在太肥了,遠遠超過 440 bytes」 tmpfs 寫到: 我對這部份不懂,所以查了一下「grub 440 byte」,「grub 440 byte wiki」 查了幾篇文章 * Arch Wiki (中文) / GRUB / 安裝到440位元組MBR啟動區(Install to 440-byte MBR boot code region) * Arch Wiki / GRUB / 2.3.1.1 Install to disk * Community Help Wiki / RestoreUbuntu/XP/Vista/7Bootloader 另外也找了Wikipedia * Wikipedia (中文) / GNU_GRUB <--這裡面有圖可以參考 * Wikipedia / GNU_GRUB * Wikipedia/ Master_boot_record * OS Dev / MRR (x86) 還在閱讀,先貼上來,盼大家來討論,把這個議題的一些概念釐清。 或是對這個議題有深入研究的人,希望可以來解惑一下。 因為這個討論區,我個人感覺,最常問到的兩個問題, 一個就是雙系統開機的問題(跟GRUB有關), 另一個是顯示卡的驅動。 之前討論的「索引」,裡面都是 紀錄一些基本的grub操作,並沒比較去做深入的探討。 剛好趁這個機會,大家來討論釐清一些觀念吧。 另外想到最近「這篇」和「這篇」討論。 ![]() ## 對照 * Community Help Wiki / RestoreUbuntu/XP/Vista/7Bootloader 這一篇,有你提到的指令「sudo dd if=/usr/lib/syslinux/mbr.bin of=/dev/sda」,在最下方 tmpfs 寫到: 以下這段感覺要搭配下面這兩篇來看 * Wikipedia (中文) / GNU_GRUB <--這裡面有圖可以參考 * Community Help Wiki / RestoreUbuntu/XP/Vista/7Bootloader tmpfs 寫到: 另外針對下面這一段(擷取上面的),也查了一下「parted」,「parted wiki」 * Wikipedia / GNU_Parted * Wikipedia 中文 / GNU_Parted * Arch Wiki / GNU_Parted * 使用 parted處理磁碟分割 * 鳥哥的 Linux 私房菜 / 第八章、Linux 磁碟與檔案系統管理 / 利用 GNU 的 parted 進行分割行為 tmpfs 寫到: 加上你二樓的測試 tmpfs 寫到: 以下是你一樓的原POST! tmpfs 寫到:
2015/5/13 13:01
|
||||||||||
![]() |
回覆: 從 MBR boot code (440 bytes) 探索 Ubuntu 無法開機的問題 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
tmpfs 寫到: tmpfs 寫到: * Community Help Wiki / RestoreUbuntu/XP/Vista/7Bootloader * Wikipedia / SYSLINUX #「syslinux」套件初步探索 ## 查詢資訊 查詢「syslinux」這個套件的「Source Package」相關資訊
顯示
查詢「syslinux」包含哪些「Binary Package (Debian Package)」。 可以執行
顯示
或是執行
顯示
## 探索「syslinux-common」這個套件 下載「syslinux-common」這個套件
解開「syslinux-common」這個套件
執行
顯示
執行
執行
## 探索「syslinux」這個「Source Package」 下載「syslinux」這個「Source Package」
執行
顯示
執行
顯示
## 資料查詢 查詢「syslinux mbr.bin」, 查到 * Syslinux Wiki / Mbr * Syslinux Wiki / Master_Boot_Record
2015/5/13 17:12
|
||||||||||
![]() |
回覆: 從 MBR boot code (440 bytes) 探索 Ubuntu 無法開機的問題 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
* Wikipedia (中文) / GNU_GRUB
根據上面這篇提到的「boot.img」和「core.img」,還有「grub-install」 ## 「boot.img」初步探索
顯示
執行
顯示
執行
對照執行
## 「grub-install」初步探索 查詢「grub-install」放在哪個位置
顯示
查詢「/usr/sbin/grub-install」屬於哪個套件
顯示
查詢「grub2-common」屬於哪個「Source Package」。
顯示
可以執行下面的指令下載「grub2」的「Source Package」
或是
探索「grub-install.c」
查詢「boot.img」和「core.img」相關的程式碼。
...暫時紀錄到此... ![]()
2015/5/13 18:35
|
||||||||||
![]() |
回覆: 從 MBR boot code (440 bytes) 探索 Ubuntu 無法開機的問題 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員一級
![]() ![]() 註冊日期:
2015/5/2 16:19 所屬群組:
已註冊使用者 等級: 4
HP : 0 / 75
![]() |
感謝 "redhung" 的回覆。
謝謝您提供的參考資料。 我的電腦不算太舊,所以應該不是「實體電腦」或「虛擬機器」的設定問題。 我的實體電腦: Intel Ivy Bridge Desktop (22nm) 我的虛擬機器: VirtualBox 4.3.26 應該是 MBR boot code (440 bytes) 的問題。 因為我把 syslinux 的 boot code 寫入 MBR 後,開機就可以正常啟動 Ubuntu 系統了。
2015/5/14 1:10
|
||||||||||
![]() |
回覆: 從 MBR boot code (440 bytes) 探索 Ubuntu 無法開機的問題 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員一級
![]() ![]() 註冊日期:
2015/5/2 16:19 所屬群組:
已註冊使用者 等級: 4
HP : 0 / 75
![]() |
感謝 "samwhelp" 的回覆。
謝謝您提供非常豐富的參考資料。 我參考您的提示, 下載了 syslinux 套件的原始碼, 查看 syslinux-4.05+dfsg/mbr/mbr.S 的內容, 好像是用 GAS (GNU Assembler) 組譯器指令寫的。 可惜,我完全看不懂 GAS 組譯器原始碼,哈哈。
2015/5/14 1:35
|
||||||||||
![]() |
回覆: 從 MBR boot code (440 bytes) 探索 Ubuntu 無法開機的問題 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
tmpfs 寫到: 我個人是覺得那個「mbr.S」暫時可以不用弄懂拉(看你其他篇的發問,你還有重要任務需要先做,所以我個人認為你的系統暫時只要能開機就行了,這部份可以慢慢再研究)。 而下面則是一些概念性的東西,應該可以先閱讀消化和吸收的。 我建議你把我的回覆再多讀幾遍。 另外把下面兩篇的內容多讀幾遍。 * Wikipedia (中文) / GNU_GRUB <--這裡面有圖可以參考 * Community Help Wiki / RestoreUbuntu/XP/Vista/7Bootloader 尤其Grub的兩段流程的概念,兩段流程的第一段和第二篇的dd mbr.bin那部份,再對照你的結論和測試結果。 還有你可以釐清和確認一下parted,是只有硬碟分割的功能,還是它也包含了bootloader的功能。 這部份我尚未確認,有待你去研究了解,因為這跟你的結論和測試有關。 以上我也還在摸索,還沒有看到全貌,所以我暫時也無法給你結論。 但你認真讀我的回覆和我給你的參考文章,你應該會發現一些概念,也許是跟你的認知是有出入的。 但也許是我的認知有出入,這就有待大家來討論和研究了。 ![]()
2015/5/14 4:23
|
||||||||||
![]() |
回覆: 從 MBR boot code (440 bytes) 探索 Ubuntu 無法開機的問題 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員三級
![]() ![]() 註冊日期:
2012/4/26 9:45 所屬群組:
已註冊使用者 等級: 12
HP : 0 / 293
![]() |
tmpfs 寫到: 根據主開機紀錄 - 維基百科,自由的百科全書裡有關硬碟分割表的部分如下: 硬碟分割表 硬碟分割結構資訊 偏移 長度(位元組) 意義 00H 1 分割狀態:00-->非活動分割;80--> 活動分割;其它數值沒有意義 01H 1 分割起始磁頭號(HEAD),用到全部8位元 02H 2 分割起始磁區號(SECTOR),占據02H的位0-5;該分割的起始磁柱號(CYLINDER),占據02H的位6-7和03H的全部8位元 04H 1 檔案系統標誌位 05H 1 分割結束磁頭號(HEAD),用到全部8位元 06H 2 分割結束磁區號(SECTOR),占據06H的位0-5;該分割的結束磁柱號(CYLINDER),占據06H的位6-7和07H的全部8位元 08H 4 分割起始相對磁區號 0CH 4 分割總的磁區數 硬碟分割表占據主啟動磁區的64個位元組(偏移01BEH--偏移01FDH),可以對四個分割的資訊進行描述,其中每個分割的資訊占據16個位元組。具體每個位元組的定義可以參見硬碟分割結構資訊。下面是一個例子: 如果某一分割在硬碟分割表的資訊如下 80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00 則我們可以看到,最前面的"80"是一個分割的啟用標誌,表示系統可啟動[1];"01 01 00"表示分割開始的磁頭號為1,開始的磁區號為1,開始的柱面號為0;"0B"表示分割的系統類型是FAT32,其他比較常用的有04(FAT16)、07(NTFS);"FE BF FC"表示分割結束的磁頭號為254,分割結束的磁區號為63、分割結束的柱面號為764;"3F 00 00 00"表示首磁區的相對磁區號為63;"7E 86 BB 00"表示總磁區數為12289662。 對於大於8.4G的現代硬碟,CHS已經無法表示, BIOS使用LBA模式,對於超出的部分,CHS值通常設為 0xFEFFFF, 並加以忽略,直接使用Offset 0x08-0x0c的4位元組相對值,再進行內部轉換. 而從你的配置表數值可以看到,四個分割區皆以LBA模式分割,而 "00 00 00 01"的相對磁區號之總磁區數為"00 00 00 01" "00 00 00 02"的相對磁區號之總磁區數為"00 00 00 02" "00 00 00 04"的相對磁區號之總磁區數為"00 00 00 04" "00 00 00 08"的相對磁區號之總磁區數為"00 00 00 08" 看起來很怪!一個硬碟不管怎麼分割,它隨便一個分割區的"總磁區數"都不太可能是"01"、"02"、"04"、"08"。 而邏輯區塊位址 - 維基百科,自由的百科全書裡的 CHS與LBA互換 CHS位址可用以下公式轉成LBA, #lba=(#c*H+#h)*S+#s-1 其中, #c、#h、#s分別是磁柱、磁頭、磁區的編號 #lba是邏輯區塊編號 H=heads per cylinder,每個磁柱的磁頭數 S=sectors per track,每磁軌的磁區數 LBA可用以下公式對應到CHS: #c=#lba/(S*H) #h=(#lba/S)%H #s=(#lba%S)+1 其中, / 是整數除法 % 是取整數除法中的餘數 請注意,當今的磁碟使用ZBR(Zone Bit Recording, 等密度記錄)方式,實際的每軌磁區數得根據它是哪一軌。不過磁碟還是會提供這個參數來符合公式,內部再自動調整。 其它公式: #lba/S=q 餘 r #s=1+r q/H=#c 餘 #h 例如: CHS總數=[600, 10, 84],求#lba=1234所對應的CHS編號: 1234/84=14 餘 58 #s=1+58=59 14/10=1 餘 4 #c=1 #h=4 #chs=(1, 4, 59) 驗算: (1*10+4)*84+59-1=14*84+58=1234 而"00 00 00 01"、"00 00 00 02"、"00 00 00 04"、"00 00 00 08",怎麼看都不太像是可以轉換出LBA的數值的數字。 而如果把數字以反序排列的話,可以得到"01 00 00 00"、"02 00 00 00"、"04 00 00 00"、"08 00 00 00",從二進位轉換成十進位後,剛好各是"64"、"128"、"256"、"512";而換算出來的結果如下: chs=(0,0,65) chs=(0,1,45) chs=(0,3,5) chs=(0,6,9) 只能到這邊了,接下來的對錯驗證,只有你有東西可以驗證了。
2015/5/14 5:31
|
||||||||||
![]() |
您可以查看帖子.
您不可發帖.
您不可回覆.
您不可編輯自己的帖子.
您不可刪除自己的帖子.
您不可發起投票調查.
您不可在投票調查中投票.
您不可上傳附件.
您不可不經審核直接發帖.