制作FAT12软盘以查看软盘的根目录条目+文件属性+文件内容
【-1】Before
for specific info , please visit http://wiki.osdev.org/Loopback_Device
【0】我們先上干貨,看到效果后,我們再說明每個步驟的緣由;
【1】進入掛載目錄,添加相關(guān)文件(依個人意愿)
Attention):要知道,以上文件和文件目錄往 /tmp 的寫入 就相當(dāng)于寫入到 floppy.img 文件夾了,我們再看看掛載信息:
【2】卸載塊設(shè)備/dev/loop1
【3】以vim 命令打開 floppy.img 文件,并輸入 :%!xxd 以16進制查看該虛擬軟盤的內(nèi)容;
Attention) FAT12文件系統(tǒng)用到扇區(qū)格式參見:http://blog.csdn.net/pacosonswjtu/article/details/48391467的“【2.1】FAT12的引導(dǎo)扇區(qū)格式:”
(糾錯1) 非常抱歉,上圖3.BPB_RootEntCnt=00e0=14 而不是15;
(補充):
4. BPB_FATSz16= 每 FAT 扇區(qū)數(shù)= offset(22) + length(2) = 0x0009 = 9(即每個FAT占用9個扇區(qū))
【4】將為什么 RIVER.TXT 要從0x0002600這個字節(jié)開始呢?
從1.44大小的格式,我們知道,FAT12文件系統(tǒng)下的軟盤結(jié)構(gòu)的第19個字節(jié)才是根目錄區(qū),而每個扇區(qū)=512字節(jié),所以19 * 512 =9728 = 0x2600處,Bingo!
而根目錄區(qū)的格式為:
4.1) 找出river.txt的 在根目錄區(qū)的屬性值
4.1.a)將 river.txt 的條目的32 個 字節(jié)復(fù)制下來,如下:
0002600: 5249 5645 5220 2020 5458 5420 0000 0000 RIVER TXT ....0002610: 0000 0000 0000 f4b6 2c47 0300 1000 0000 ........,G......4.1.b)則 該文件的屬性如下表所示:
4.2)在FAT中 尋找出 river.txt 的所有簇號
Attention):由上圖的軟盤結(jié)構(gòu)圖,我們知道FAT從第1個扇區(qū)開始,一個扇區(qū)512個字節(jié),所以FAT從地址0x0200開始;
4.2.a)0000200: f0 ff ff 00 f0 ff ff ff ff ff ff ff ff 0f 0000 …………….
FAT表結(jié)構(gòu)是怎樣的?參見 http://blog.csdn.net/pacosonswjtu/article/details/483914674.2.a.1)我們看到,0-ff0、1-fff、2-000、3-fff、3-fff表示這個簇就是最后一個簇了,所以river.txt文件對應(yīng) 的就是 簇3。
(Attention):這里由于river.txt 只有15個字符,3個river strings 因此一個扇區(qū)就可以裝下了; 如果readers 有 interst, 不妨可以建立一個超過512字節(jié)(一個扇區(qū))的文件,然后就可以演示出從FAT中找出該文件的所有簇號,不過你也可以參見 http://blog.csdn.net/pacosonswjtu/article/details/48391467中“【2.2】文件分配表-FAT”中的“看個荔枝”;4.2.a.2) 我們轉(zhuǎn)到數(shù)據(jù)區(qū),看第3個簇內(nèi)容;(前面已經(jīng)提到,一個簇==一個或多個扇區(qū))
- 4.2.a.3)算數(shù)據(jù)區(qū)開始扇區(qū)號:
step1) 通過文件系統(tǒng)的用到扇區(qū)數(shù)據(jù)結(jié)構(gòu)找出 根目錄區(qū)條目數(shù) BPB_RootEntCnt = 14 和 BPB_BytesPerSec = 512,(參見模塊3的第一張圖);
step2) 所以算數(shù)據(jù)區(qū)開始扇區(qū) =1 + 9 + 9 + 14 = 33 ,第33扇區(qū)的偏移量為 33*512 = 16896B, 16896/16=1056行,所以數(shù)據(jù)區(qū)的開始字節(jié)數(shù)為:16896B 。。。。(怎么計算出來的? 參見http://blog.csdn.net/pacosonswjtu/article/details/48391467 中的 “【2.3】根目錄區(qū)-root dir sector(如何計算根目錄區(qū)的扇區(qū)數(shù)量?)”)
step3) 因為river.txt 的開始簇號為3,由于第1、2個FAT項不用,即簇0和簇1不用,所以簇號從2起算,即數(shù)據(jù)區(qū)的第一個扇區(qū)對應(yīng)簇號2,所以簇號3對應(yīng)第2個扇區(qū),所以river.txt 的 起始地址為 16896 + 512 = 17408B,而17408 / 16 = 1088,正好與下圖匹配上。
(Bingo!)對, filesystem 就應(yīng)該這么玩。
(Attention)以上演示效果完畢,下面,我們將制作FAT12虛擬軟盤并掛載到/tmp下的每一步的緣由;
【Reasons of precedure manufacturing virtual floppy with FAT12 file system】
R1)dd if=/dev/zero of=floppy.img bs=512 count=2880 創(chuàng)建空虛擬軟盤
/dev/zero : 在類UNIX 操作系統(tǒng)中, /dev/zero 是一個特殊的文件,當(dāng)你讀它的時候,它會提供無限的空字符(NULL, ASCII NUL, 0x00)。其中的一個典型用法是用它提供的字符流來覆蓋信息,另一個常見用法是產(chǎn)生一個特定大小的空白文件。R2)sudo losetup /dev/loop1 floppy.img 給該軟盤文件關(guān)聯(lián)一個塊設(shè)備 /dev/loop1
轉(zhuǎn)自: http://itlab.idcquan.com/linux/set/942370.html- loop設(shè)備介紹: loop 設(shè)備是一種偽設(shè)備(pseudo-device),或者也可以說是仿真設(shè)備。它能使我們像塊設(shè)備一樣訪問一個文件。在使用之前,一個loop設(shè)備必須要和一個文件進行連接。這種結(jié)合方式給用戶提供了一個替代塊特殊文件的接口。因此,如果這個文件包含有一個完整的文件系統(tǒng),那么這個文件就可以像一個磁盤設(shè)備一樣被 mount 起來。
losetup 指令: 此命令用來設(shè)置循環(huán)設(shè)備。循環(huán)設(shè)備可把文件虛擬成塊設(shè)備,籍此來模擬整個文件系統(tǒng),讓用戶得以將其視為硬盤驅(qū)動器,光驅(qū)或軟驅(qū)等設(shè)備,并掛入當(dāng)作目錄來使用。
losetup [ -e encryption ] [ -o offset ] loop_device file losetup [ -d ] loop_device -e 表示加密的方式-o 設(shè)置數(shù)據(jù)偏移量-d 卸載設(shè)備loop_device 循環(huán)設(shè)備名,在 linux 下如 /dev/loop0 , /dev/loop1 等。file 要與循環(huán)設(shè)備相關(guān)聯(lián)的文件名,這個往往是一個磁盤鏡象文件,如 *.img
Bingo!
總結(jié)
以上是生活随笔為你收集整理的制作FAT12软盘以查看软盘的根目录条目+文件属性+文件内容的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么把网站关联到万网(到万网如何注册网站
- 下一篇: 安卓qq破解版苹果在线(安卓qq破解版)