FreeBSD下如何訪問MS-DOS文件系統?
2024-07-26 00:29:15
供稿:網友
Dru Lavigne
12/13/2000
在今天的文章里,我來介紹一下兩個來自ports collection的工具,它們用于操作MS-DOS文件系統上的數據。在mtools中的一套DOS風格的命令行工具可以操作軟盤上的MS-DOS數據,你硬盤上的其它分區,Jaz和Zip驅動器。程序mfm提供了一個漂亮的GUI圖形界面以訪問軟盤上的MS-DOS數據,并可以在你的宿主目錄和MS-DOS格式化過的軟盤間快速地傳送數據。
這兩個工具的優點是可以讓用戶透明地訪問這些數據而無需事先裝載文件系統。如果你還記得裝載其它文件系統這篇文章里的內容,那么應該知道只有超級用戶可以裝載文件系統。如果你是個管理員或者使用FreeBSD系統的家庭成員,那么不會出現在有人想訪問軟件數據時搶著裝載文件系統的情況。但是,作為一個新用戶,你可能會在取出軟件之前忘了卸載文件系統;如果你曾經有這樣的經歷,你會發現FreeBSD會驚慌,重啟或者在你這樣做時向你給出討厭的錯誤信息。
所以,讓我們還是創建這些工具并查看一下如何使用吧。要創建它們有兩個方法:預編譯安裝包或移植port。我會以port方式創建mtools,并以安裝包方式安裝mfm來示范這兩種方法。先成為超級用戶,確保已經聯入Internet,并進入mtools的port目錄進行編譯:
su
PassWord:
cd /usr/ports/emulators/mtools
make && make install
一旦編譯完成,打開你最喜愛的web瀏覽器并聯到http://www.freebsd.org/x11-fm.html。往下翻到mfm-1.5,把安裝包保存到硬盤上的某個目錄中;我已經在系統上建好一個目錄/usr/packages用于此目的。當下載完成后:
cd /usr/packages
pkg_add mfm*
當安裝好后,用exit退出超級用戶賬號。如果你正在用C shell,請用rehash命令使命令解釋器知道有新的程序了。
讓我們來看一下mtools。如果你鍵入它的名稱,它會給出一份你可以使用的工具列表:
mtools
支持的命令有:mattrib、mbadblocks、mcat、mcd、mcopy、mdel、mdeltree、mdir、mdoctorfat、mdu、 mformat、minfo、mlabel、mmd、mmount、mpartition、mrd、mread、mmove、mren、mshowfat、 mtoolstest、mtype、mwrite、mzip。
如果你以前曾經用過DOS的話,就會覺得其中有很多程序名很熟悉的;唯一的區別只是它們都是字母m開頭。每個工具都有相關的手冊頁,所以你可以看一下它們的語法。手冊頁的第1和第5部分有mtools本身的信息。
讓我們來看一下如果鍵入mcd會發生什么:
mcd
A:/
這看起來還不錯,因為這是MS-DOS的提示符用來表示你的軟驅。有經驗的DOS用戶會注意到那個斜杠用Unix風格替代了DOS風格。現在來看看是否可以用mdir命令查看軟盤上的內容:
mdir
fd0c: hard error reading fsbn 0 (No status)
plain_io: Input/output error
init A: could not read boot sector
Cannot initialize 'A:'
哦,我太心急了,都忘了在軟驅里插張盤了。幸運的是,mdir會在試圖訪問盤上數據前作仔細檢查的。好,現在插張盤再試一下:
mdir
Can't open /dev/rfd0: Permission denied
Cannot initialize 'A:'
在被權限問題搞得頭暈之前,先來檢查一下mtools的配置文件看它需要什么。如果你鍵入:
man 5 mtools
你將發現配置文件的名稱是mtools.conf,而且它位于/usr/local/etc中。現在看一下誰有該文件的訪問權限并更改一下:
ls -l /usr/local/etc
drwxr-xr-x 9 root wheel 1024 Dec 2 11:57 .
-r--r--r-- 1 root wheel 4441 Dec 2 11:50 mtools.conf
看起來任何人都有讀此文件,但只有超級用戶才能更改內容。(忘了權限的含義?)讓我們先來讀一下這個文件:
more /usr/local/etc/mtools.conf
# Example mtools.conf files. Uncomment the lines which correspond to
# your architecture and comment out the "SAMPLE FILE" line below
#
# A note on permissions: a user must have read and
# write permissions for the devices named here in
# order to access the DOS file systems. You might
# give ALL USERS access to ALL FLOPPY DISKS via
#the command
#
# chmod a+rw /dev/*fd* /dev/rfd[0-9]*
#
# # FreeBSD floppy drives
drive a: file="/dev/rfd0"
drive b: file="/dev/rfd1"
看來我們需要讓所有的用戶都有訪問軟驅的權限;幸運的是,指出FreeBSD軟驅設備的那些行已經為我們去掉了注釋,所以我們無需對此配置文件作任何更改。
現在看一下/dev/rfd0的權限情況,因為它被mtools看作是“A:”:
ls -l /dev/rfd0
crw-r----- 18 root Operator 9, 0 Oct 3 08:51 /dev/rfd0
看來這就是問題所在。因為mtools.conf規定,用戶需要rw讀寫權限來訪問該設備,但現在用戶只有r讀。由于該文件屬于root,我們必需成為超級用戶才能更改它的權限;因為我只有一個軟驅,所以就對這個設備加入了rw權限:
su
Password:
chmod a+rw /dev/rfd0
ls -l /dev/rfd0
crw-rw-rw- 18 root operator 9, 0 Oct 3 08:51 /dev/rfd0
離開超級用戶賬號并以普通用戶身份再試一下mdir命令;你應該可以看到軟盤上的內容了。
讓我們再假設一些東西。我在自己的硬盤的起始部分有一個FAT分區;讓我們來看一下mtools是否能訪問它。在mtools.conf中有一些行是關于硬盤的:
more /usr/local/etc/mtools.conf
# IDE hard disks
# first disk on the first IDE
# interface (wd0) slice 1 (s1)
drive c: file="/dev/rwd0s1"
由于我使用的FreeBSD版本高于4.0,所以其第一個IDE接口實際稱為ad0而不是wd0了。這樣我需要變為超級用戶并編輯一下剛才讀到的行:
drive c: file="/dev/rad0s1"
^
當現在是超級用戶時,我還要檢查一下該設備的權限情況:
ls -l /dev/rad0s1
crw-r----- 1 root operator 116, 0x00020002 Oct 4 15:58 rad0s1
并更改一下以使用戶可以訪問C:盤:
chmod a+rw /dev/rad0s1
然后,作為一個普通用戶,來看一五我是否能訪問A:盤和C:盤上的數據:
mcd a:
mdir
Volume in drive A has no label
Volume Serial Number is 3505-18E3
Directory for A:/
dru3 txt 2846 11-28-2000 21:46
inetdc~1 txt 13669 10-05-2000 21:22 inetd.conf.txt
cisco doc 10752 11-13-2000 18:07
3 files 27 267 bytes
1 428 698 bytes free
mcd c:
mdir
Volume in drive C has no label
Volume Serial Number is 39D0-A67B
Directory for C:/
bootsect bsd 512 10-04-2000 15:22
confer~1 11-01-2000 20:39 conferencing server
sybex 11-10-2000 20:18 Sybex
3 files 512 bytes
492 470 272 bytes free
現在,我知道在我的C:盤上有一些隱藏文件;如果看一下man dir的話,會知道-a開關能顯示隱藏文件。讓我們再試一下:
mdir -a
Volume in drive C has no label
Volume Serial Number is 39D0-A67B
Directory for C:/
bootsect dos 512 10-04-2000 15:33
config sys 0 10-04-2000 15:40
autoexec bat 0 10-04-2000 15:40
io sys 0 10-04-2000 15:40
msdos sys 0 10-04-2000 15:40
bootsect bsd 512 10-04-2000 15:22
msdownld tmp 10-04-2000 16:10
confer~1 11-01-2000 20:39 conferencing server
recycled 11-01-2000 21:01 Recycled
sybex 11-10-2000 20:18 Sybex
arcldr exe 148992 12-07-1999 12:00
arcsetup exe 162816 12-07-1999 12:00
ntldr 214416 12-07-1999 12:00
ntdetect com 34468 11-25-2000 21:45
boot ini 214 11-25-2000 20:00
pagefile sys 104857600 11-25-2000 19:51
16 files 105 419 530 bytes
492 470 272 bytes free
再看一下我是否可以讀取其中一個文件:
mtype boot.ini
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(3)/WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(3)/WINNT="Microsoft
Windows 2000 Server" /fastdetect
C:/bootsect.bsd="FreeBSD"
那么我是否能把該文件拷到我的軟盤上呢:
mcopy boot.ini a:
我的軟盤一陣顛簸,這是個好信號。來檢查一下是否正確:
mdir a:
Volume in drive A has no label
Volume Serial Number is 3505-18E3
Directory for A:/
dru3 txt 2846 11-28-2000 21:46
inetdc~1 txt 13669 10-05-2000 21:22 inetd.conf.txt
boot ini 214 12-03-2000 11:25 boot.ini
cisco doc 10752 11-13-2000 18:07
4 files 27 481 bytes
1 428 484 bytes free
在FreeBSD系統下把NT引導分區上的文件傳送到軟盤上真是非常棒啊。我還可以容易地把文件發回來,甚至在FreeBSD和C:盤或A:盤之間也可以。
關于mtools還要注意一點,它提供了DOS風格的工具,DOS的功能是相當有限的。例如,我就不能閱讀軟盤上的cisco.doc文件,因為DOS不能識別“doc”擴展名。如果你同時在A:盤和C:盤上工作,就必需象這樣在它們之間用mcd切換:
mcd a: 查看和操作A:盤上的數據
mcd c: 查看和操作C:盤上的數據
另外,確保你只試圖訪問MS-DOS文件系統;也就是說,不要嘗試查看用Unix文件系統格式化的軟盤上的內容。
現在來看一下mfm。這個工具用起來很簡單,因為它有個直觀的界面;不過它的功能比mtools更有限,因為它只有用于訪問軟盤上的MS-DOS數據。讓我們來看一下它安裝到哪兒去了:
whereis -b mfm
mfm: /usr/X11R6/bin/mfm
因為它是個GUI,你必需在XWindows中運行它。我在XFCE工具條上建了個快捷方式。如果你還不知道如何在窗口管理器中建立快捷方式的話,打開一個xterm并鍵入帶路徑的mfm。(mfm的一個抓圖鏈接)
當它打開時,你會看到一個帶有兩個面板的窗口;缺省情況下,這兩個面板都會顯示你宿主目錄的內容。目錄有一個文件夾圖標,而它的名稱和屬性以藍色顯示。文件的圖標看起來象一張紙,而它的屬性以黑色顯示。如果用鼠標點擊Options菜單,可以選“Show dot files”以顯示隱藏文件。
現在插入你的軟盤;在其中一個面板頂部的菜單條上點擊箭頭并選a:,你會看到軟盤上的內容。通過選擇軟盤上的一個文件并點擊Copy按鈕就可以把該文件拷到宿主目錄里了。或者點擊宿主目錄里的一個文件就可以快速地把它拷到軟盤上了。
在面板上點周File菜單,你會看到刪除、換名、打印和選擇文件的選項。用這個菜單還可以建立一個新目錄。如果取出了那張盤插一張新的話,用View菜單的刷新選項查看新盤上的內容。
雖然功能有限,mfm仍然是以可視化操作宿主目錄內容的最快方法。我還發現它是在軟盤和宿主目錄間發送文件最簡單的方法。