文  胡尚忠老師

  

講師專長
RHCE/RHCX
RH033 Red Hat Linux 基礎實務訓練
RH133 Red Hat Linux 系統管理訓練
RH253 Red Hat Linux 網路及安全管理訓練
MicroSoft Office文書處理
多媒體網頁設計
Open Office

講師經歷
RHCE/RHCX
RH033 Red Hat Linux 基礎實務訓練
RH133 Red Hat Linux 系統管理訓練
RH253 Red Hat Linux 網路及安全管理訓練
MicroSoft Office文書處理
多媒體網頁設計
Open Office

專業證照
Linux LPI-I

NCLP

ABT

 

 常常有人說LINUX沒新聞,沒事件,不好推廣,其實『LINUX』這個名詞涵蓋的範圍非常的廣,有一些軟體專案,初起看到他覺得寫的不錯,很厲害的,很 有創意的搞法,沒過幾年,就商業化成為軟體公司,而他們也不會忘本,繼續對開放原始碼社群提供研發的成果及程式的修正。你要嫌他公司小嗎?喔!不!他所提 供的功能幾乎每一個LINUX用戶都會用到,客戶群體之大,應用範圍之廣超乎想像.

NTFS-3G就是一個這樣的例子,幾乎每一個UNIX based的作業系統,幾乎都會需要這樣的驅動程式來連接NTFS檔案系統,公司成立之後成長速度極快,只是他們遠在地球的另一端,網友往往只注意可不可 以用,會不會通,好不好用,但卻不注意商業化的潛力,所以這個例子一直沒有被提出來討論,甚至很少有人知道,NTFS-3g.org已經轉化為軟體公司 了,所以我們可以藉由這個機會,來看一看這些上課時沒有時間提到的成功案例。


說起LINUX核心對NTFS的支援,最早的專案是Linux-NTFS(http://www.linux-ntfs.org/doku.php), 大約在2000年成立,在2002年左右,LINUX核心內建的模組可以對NTFS檔案系統做唯讀的掛載,就是他們的專案成果,主要發展人員是Anton Altaparmakov,因為當時NTFS檔案系統的掛載,不但是實驗性質,還只能惟讀,如果使用了實驗用的NTFS讀寫模組,還會需要再用其他工具先 對檔案系統進行修復,事後還要重開機用WINDOWS來檢查修復檔案系統,十分的不方便。


因為這個原因,LINUX-NTFS專案中的另一位開發者Szabolcs Szakacsits,在2006年另外成立一個獨立於LINUX-NTFS的專案,叫作NTFS-3g,目的在建立一個『具有的完整資料夾索引操作和 「不受限的建立和刪除檔案」為基礎』,獨立於作業系統之外的NTFS檔案系統掛載應用,其應用可擴及Linux, Mac OS X, FreeBSD, NetBSD, OpenSolaris, QNX, Haiku,及其他商用作業系統上,該專案在2006年推出第一個BETA版,2007年3月底推出第一個穩定版,從此LINUX就可以在NTFS檔案系 統上自由的讀寫了。

接著在2007年,正式版出來的同時,Szabolcs先生收到愈來愈多有關於商業作業系統授權,整合支援等等的需求,而很快的在2008年成立TUXERA公司(http://www.tuxera.com/),現在當你連結到http://www.ntfs-3g.org的 時候,會自動轉址到公司網頁。2009年公司成長的非常快速,連剛剛提到的Anton Altaparmakov也加入這間公司,2009年8月,該公司與Microsoft簽署智慧財產權協定,加入微軟的跨平台互動供應商聯盟 (Interoperability Vendor Alliance,http://interopvendoralliance.org/),並推出該公司專為消費電子產品所設計的exFAT檔案系統驅動程式。

公司在芬蘭,赫爾辛基,各位可以去看一下工程師創業成功的爽照,發啦!XD....
http://www.tuxera.com/about-us/


關於NTFS檔案系統在RHEL/CentOS的支援,請先安裝rpmforge的安裝來源,安裝rpm檔。

參考網址:https://rpmrepo.org/RPMforge/Using

RHEL / CentOS

TIP For CentOS Yum users there is a very good document on how to enable RPMforge safely using the Yum priorities plugin
RHEL5 / CentOS-5

i386: http://packages.sw.be/rpmforge-r ... 1-1.el5.rf.i386.rpm

x86_64: http://packages.sw.be/rpmforge-r ... 1.el5.rf.x86_64.rpm

PPC : http://packages.sw.be/rpmforge-r ... .1-1.el5.rf.ppc.rpm
RHEL4 / CentOS-4

i386: http://packages.sw.be/rpmforge-r ... 1-1.el4.rf.i386.rpm

x86_64: http://packages.sw.be/rpmforge-r ... 1.el4.rf.x86_64.rpm

PPC : http://packages.sw.be/rpmforge-r ... .1-1.el4.rf.ppc.rpm
RHEL3 / CentOS-3

i386: http://packages.sw.be/rpmforge-r ... 1-1.el3.rf.i386.rpm

x86_64: http://packages.sw.be/rpmforge-r ... 1.el3.rf.x86_64.rpm


然後打開pirut,也就是system-config-packages,或用yum指令,安裝下面兩個RPM就可以了。

fuse-ntfs-3g-2009.11.14-1.el5.rf.<CPU類型>.rpm
ntfsprogs-1.13.1-6.el5. <CPU類型>.rpm

比如i386的用戶就是使用fuse-ntfs-3g-2009.11.14-1.el5.rf.i386.rpm,依此類推。


NTFS檔案系統的掛載

在RHEL中,掛載NTFS分割區的驅動程式已經整合至mount 指令中,假設下列指令的掛載點是/mnt/nt1,NTFS分割區是在/dev/sda1,則指令為:

# mount -t ntfs-3g /dev/sda1 /mnt/nt1

只要上面的rpm安裝正確,則圖形介面的自動掛載工具就會正常運作,隨身碟內的NTFS分割區,都可以自動掛載。


有趣的是,
往往大家知道的,就差不多到這裡,對NTFS更進一步的動作呢?在華文領域的搜尋中,卻甚少見到引述,所以我們可以稍微介紹得深入一些。

1.修復NTFS檔案系統錯誤

首先看到這樣的掛載錯誤,當檔案系統有錯誤時,mount指令出現這種錯誤訊息。

[root@Vigor10 mnt]# mount /dev/sdb1 aaa
ntfs_mst_post_read_fixup: magic: 0x52545352  size: 1024  usa_ofs: 30  usa_count: 8: 不適用的引數
ntfs_mst_post_read_fixup: magic: 0x00000000  size: 1024  usa_ofs: 0  usa_count: 65535: 不適用的引數
$MFTMirr does not match $MFT (record 2).
Failed to mount '/dev/sdb1': 輸入/輸出錯誤
NTFS is either inconsistent, or there is a hardware fault, or it's a
SoftRAID/FakeRAID hardware. In the first case run chkdsk /f on Windows
then reboot into Windows twice. The usage of the /f parameter is very
important! If the device is a SoftRAID/FakeRAID then first activate
it and mount a different device under the /dev/mapper/ directory, (e.g.
/dev/mapper/nvidia_eahaabcc1). Please see the 'dmraid' documentation
for more details.

這是一種常見的狀況,發生在隨身碟在還沒有正常卸載就直接拔出來的情形,檔案系統有不一致的狀況,或有輸入輸出的錯誤,往往我們會把所謂『輸入輸出錯誤』 當成是硬體問題,所以還要再觀察其他的錯誤訊息,如『NTFS is either inconsistent, or there is a hardware fault』,這個時候,就可以嚐試用一下修復檔案系統的指令了。

[root@Vigor10 mnt]#
ntfsfix /dev/sdb1
Mounting volume... FAILED
Attempting to correct errors...
Processing $MFT and $MFTMirr...
Reading $MFT... OK
Reading $MFTMirr... OK
Comparing $MFTMirr to $MFT... FAILED
Correcting differences in $MFTMirr record 2...OK
Correcting differences in $MFTMirr record 3...OK
Processing of $MFT and $MFTMirr completed successfully.
Setting required flags on partition... OK
Going to empty the journal ($LogFile)... OK
NTFS volume version is 3.1.
NTFS partition /dev/sdb1 was processed successfully.

ntfsfix指令並不能與Windows的chkdsk 畫上等號,ntfsfix只能修復一些基礎性的錯誤,檔案系統不一致的錯誤,重設日誌並設定該分割區會在下一次Windows開機時進行檔案系統檢查。當LINUX出現NTFS掛載錯誤時,最先試的就是這個指令。

接著掛載就可以成功了。

[root@Vigor10 mnt]# mount /dev/sdb1 aaa

2.對NTFS分割區進行格式化

格式化不就是建立檔案系統?對ext2/3檔案系統而言就是mke2fs這個指令,所以建立NTFS檔案系統,就可以使用mkntfs這個指令啦!

#
mkntfs /dev/sdb1

3.顯示或修改NTFS檔案系統標籤

相對於EXT2/3檔案系統的e2label指令,NTFS但系統也可以藉由『ntfslabel』指令改變檔案系統標籤,用法如下:

顯示檔案系統標籤


[root@Vigor10 ~]#
ntfslabel  /dev/sdb1
Volume is dirty.
Run chkdsk and try again, or use the force option.

在此例中,『dirty』表示這個隨身碟並未在WINDOWS上面進行檢查,所以後續的訊息提醒我們未來要將放到WINDOWS的系統上執行『chkdsk』,進行正式的檢查。

接著他強調要使用『-f, --force 強制執行』,而強制模式就是將檔案系統指令的執行的一些限制忽略,比如我們現在面對的是一個『dirty』的檔案系統,需要進行檢查之後才能變更檔案系統 內容,但當我們使用強制模式時可幫助我們使用執行的參數用先假定為某些預設值,以強迫執行該指令,不過使用時必須要小心。

[root@Vigor10 ~]# ntfslabel -f /dev/sdb1
Volume is dirty.
Forced to continue.

原本是無標籤,所以第3行顯示為空白,現在修改檔案系統標籤為『READY』

[root@Vigor10 ~]# ntfslabel -f /dev/sdb1 READY
Volume is dirty.
Forced to continue.
[root@Vigor10 ~]# ntfslabel -f /dev/sdb1
Volume is dirty.
Forced to continue.
READY
^^^^^^^^
因為上面的例子是一個『dirty』的檔案系統,所以有一些執行上的限制,下面的例子,就是一個『乾淨』的NTFS檔案系統執行的狀況,你可以看到執行的狀況良好正常:

[root@server1 ~]# umount /dev/sdb8
[root@server1 ~]# ntfslabel /dev/sdb8
media

[root@server1 ~]# ntfslabel /dev/sdb8 MEDIA1

[root@server1 ~]# ntfslabel /dev/sdb8
MEDIA1

請注意,
幾乎所有的檔案系統都不希望你在掛載的狀況下進行檔案系統內容的修改,因為這會造成資訊的不一致,所以一定要在卸載之後,才能檢查檔案系統,或對檔案系統的內容進行改變

[root@server1 ~]# mount LABEL=MEDIA1 /media1

mount 指令可以用正常的LABEL=MEDIA1的方式進行掛載,還不需要指定 “-t ntfs-3g”,也就是現在核心可以自動偵測辨識檔案系統的意思,這個功能在去年年初還做不到,現在可以了。

[root@server1 ~]# ntfslabel /dev/sdb8 media1
Access is denied because the NTFS volume is already exclusively opened.
The volume may be already mounted, or another software may use it which
could be identified for example by the help of the 'fuser' command.
You can use force option to avoid this check, but this is not recommended
and may lead to data corruption.

無法在檔案系統掛載的狀況下進行標籤的修改。

[root@server1 ~]# ntfslabel -f /dev/sdb8 media1
Forced to continue.
Error opening partition device: 裝置或系統資源忙碌中.
Failed to startup volume: 裝置或系統資源忙碌中.
Failed to mount '/dev/sdb8': 裝置或系統資源忙碌中.
Access is denied because the NTFS volume is already exclusively opened.
The volume may be already mounted, or another software may use it which
could be identified for example by the help of the 'fuser' command.

就算是用強制模式也不行。雖然在MAN PAGE中有提到可以在掛載時用強制模式修改檔案系統標籤,但是為了檔案系統的健康及安全,還是要儘量避免這樣的作法。

格式化NTFS檔案系統時,也可以用”-L <NEW LABEL>”的方法指定檔案系統標籤。

# mkntfs -L “HAPPY” /dev/sdb1

4.NTFS檔案系統的救援及備份

遇到硬碟有壞軌,或其他硬體或檔案系統問題的時候,或者是因為系統安全的需求需要做一些備份的工作,我們常常會把分割區備份為映像檔,在硬體問題解決之 後,再將資料由映像檔回復到分割區中。現在介紹的這個指令,就是專門在做檔案系統的複製,他讀取分割區的內容時,是以磁區為基礎的讀法,也就是說,當老硬 碟出現某些熱效應時,比如不熱的時候正常,開機開久之後太熱了就不正常的狀況,用戶必須爭取時間儘快的在硬碟真正掛掉之前將資料讀出來,然後更換硬碟,再 將原來在硬碟分割區上的資料恢復到新的分割區上的備份救援的工作應用。

更可以說,當狀況已經糟糕到NTFS分割區在WINDOWS作業系統下已經讀取有困難時,這個指令可能是各位的救援檔案系統的最後一招了。我們現在所用的例子,就是那個『dirty』的分割區,其分割區使用狀況如下:

[root@Vigor10 aaa]# df -h /dev/sdb1
檔案系統      容量  已用 可用 已用% 掛載點
/dev/sdb1             1.9G  1.3G  654M  67% /mnt/aaa

首先,卸載分割區
[root@Vigor10 mnt]# umount aaa

接著用ntfsclone指令,--save-image告訴程式讀取分割區磁區內容將存到一個特殊的映像檔,--output指定映像檔儲存的位置,最後加上需要備份的分割區裝置名稱。

[root@Vigor10 mnt]# ntfsclone --save-image --output /data2/backup.img /dev/sdb1
ntfsclone v1.13.1 (libntfs 9:0:0)
ERROR: Volume '/dev/sdb1' is scheduled for a check or it was shutdown
uncleanly. Please boot Windows or use the --force option to progress.

錯誤產生,因為該檔案系統並未妥善卸載,所以仍有檔案系統不一致的現象,需要在WINDOWS內執行CHKDSK,因此拒絕這個動作的執行,所以這個時候,我們如果一定需要備份,就要用強制模式了

[root@Vigor10 mnt]# ntfsclone
--force --save-image --output /data2/backup.img /dev/sdb1
ntfsclone v1.13.1 (libntfs 9:0:0)
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 2019835904 bytes (2020 MB)
Current device size: 2019838976 bytes (2020 MB)
Scanning volume ...
100.00 percent completed
Accounting clusters ...
Space in use       : 1335 MB (66.1%)   
Saving NTFS to image ...
100.00 percent completed
Syncing ...

加上--force之後成功,映像檔只儲存有資料的磁區,不會存空白的區塊,所以只有1335MB,這是一支USB2.0手指碟,建立映像檔過程大約二到三分鐘,相當的有效率。

-rwx------ 1 root   root   1334832045  2月 22 05:37 backup.img

現在我們將這個有問題的分割區用dd指令將其全部填充為0,就代表更換硬體的動作,是一個全新未格式化的分割區。

dd if=/dev/zero of=/dev/sdb1 bs=2048 count=1000000

現在將映像檔貼回分割區中:

[root@Vigor10 mnt]# ntfsclone --restore-image --overwrite /dev/sdb1 /data2/backup.img
ntfsclone v1.13.1 (libntfs 9:0:0)
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Image volume size  : 2019835904 bytes (2020 MB)
Image device size  : 2019838976 bytes
Space in use       : 1335 MB (66.1%)   
Restoring NTFS from image ...
100.00 percent completed
Syncing ...

這種影像檔的回復動作與dd指令不同,dd指令只會簡單的複製或傳送所有的磁區,不會分辨磁區內的資料是有意義的,還是沒有意義的,使用ntfsclone,他只會讀取檔案有使用的磁區,未使用的磁區就不儲存,所以效率高,而且備份及回復都可以節省相當多的時間。

現在再試試看LABEL是否正常?

[root@Vigor10 mnt]# ntfslabel /dev/sdb1
Volume is dirty.
Run chkdsk and try again, or use the force option.
[root@Vigor10 mnt]# ntfslabel -f /dev/sdb1
Volume is dirty.
Forced to continue.
READY

映像檔所備份的是一個『dirty』的分割區,所以回復之後,也得到一個『dirty』的分割區,使用-f之後可以看到檔案系統標籤為READY。

接著測試掛載:

[root@Vigor10 mnt]# mount /dev/sdb1 aaa

掛載成功,當然,此分割區必須在WINDOWS下開機並進行檔案系統檢查,『dirty』的標記,才會消除。

關於使用ntfsclone請注意三件事:

使用—save-image參數所建立的映像檔並不適合掛載,適合用在備份分割區之用
假如原來備份的NTFS分割區是WINDOWS的可開機分割區,回復至新分割區之後,將會無法開機,因為 ntfsclone的目的是建立檔案系統備份,不是系統備份,所以不會備份空白的磁區,不會記憶開機載入程式等等開機相關程式的硬體位址,也因為這樣的設 計,才能夠有效的減少時間的浪費。
遇到讀取困難的硬碟及分割區,可以加上—rescue參數,此參數會進一步嘗試讀取無法讀取的磁區,減少資料損失的可能性
使用方法如下:
     
      ntfsclone --rescue --force --save-image --output /data2/backup.img /dev/sdb1


5.調整NTFS檔案系統大小

ntfsresize可以在不損失資料的狀況下調整 Windows XP, Windows Server 2003, Windows 2000, Windows NT4 及Longhorn 的NTFS 檔案系統,在調整之前甚至不需要進行檔案系統檢查及重組,因為程式本身就會在調整檔案系統大小前完成重組的動作。

調整大小的動作包含變大及變小,分別列述於下:

  • 將檔案系統變小之後,再用fdisk 或其他調整分割區的工具進行分割區範圍的調整。
  • 將檔案系統變大之前,先用fdisk 或其他調整分割區的工具進行分割區範圍的調整。
  • 實際調整檔案系統大小之前先進行測試動作,以確定分割區是否可以進行大小的調整:

#ntfsresize –-check /dev/sdb1

  • 將檔案系統變小之前,可以先用—info參數檢測檔案系統可允許的最小值是多少:

[root@Vigor10 mnt]# ntfsresize  --info /dev/sdb1
ntfsresize v1.13.1 (libntfs 9:0:0)
Device name        : /dev/sdb1
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 2019836416 bytes (2020 MB)
Current device size: 2019838976 bytes (2020 MB)
Checking filesystem consistency ...
100.00 percent completed
Accounting clusters ...
Space in use       : 1335 MB (66.1%)
Collecting resizing constraints ...
You might resize at 1334509568 bytes or 1335 MB (freeing 685 MB).
Please make a test run using both the -n and -s options before real resizing!

上述的結果顯示,檔案系統最小容量可以到1335MB,釋放出685MB的空間。

現在實際進行調整,先將檔案系統變小為1600MB:

[root@Vigor10 mnt]# ntfsresize -f --size 1600M /dev/sdb1
ntfsresize v1.13.1 (libntfs 9:0:0)
Device name        : /dev/sdb1
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 2019836416 bytes (2020 MB)
Current device size: 2019838976 bytes (2020 MB)
New volume size    : 1599996416 bytes (1600 MB)
Checking filesystem consistency ...
100.00 percent completed
Accounting clusters ...
Space in use       : 1335 MB (66.1%)
Collecting resizing constraints ...
Needed relocations : 96463 (396 MB)
WARNING: Every sanity check passed and only the dangerous operations left.
Make sure that important data has been backed up! Power outage or computer
crash may result major data loss!
Are you sure you want to proceed (y/[n])? y  <-----要回答'y'
Schedule chkdsk for NTFS consistency check at Windows boot time ...
Resetting $LogFile ... (this might take a while)
Relocating needed data ...
100.00 percent completed
Updating $BadClust file ...
Updating $Bitmap file ...
Updating Boot record ...
Syncing device ...
Successfully resized NTFS on device '/dev/sdb1'.
You can go on to shrink the device for example with Linux fdisk.
IMPORTANT: When recreating the partition, make sure that you
  1)  create it at the same disk sector (use sector as the unit!)
  2)  create it with the same partition type (usually 7, HPFS/NTFS)
  3)  do not make it smaller than the new NTFS filesystem size
  4)  set the bootable flag for the partition if it existed before
Otherwise you won't be able to access NTFS or can't boot from the disk!
If you make a mistake and don't have a partition table backup then you
can recover the partition table by TestDisk or Parted's rescue mode.

掛載測試:

[root@Vigor10 mnt]# mount /dev/sdb1 aaa

檢查檔案系統用量

[root@Vigor10 mnt]# df  /dev/sdb1
檔案系統       1K-區段  已用     可用 已用% 掛載點
/dev/sdb1              1562496   1303212    259284  84% /mnt/aaa

現在在不改變分割區大小的狀況下,將檔案系統調大至分割區所允許的最大範圍:

先卸載分割區,再調整大小,不指定—size參數時,就是依分割區的大小為變大的大小:

[root@Vigor10 mnt]# ntfsresize -f  /dev/sdb1
ntfsresize v1.13.1 (libntfs 9:0:0)
Device name        : /dev/sdb1
NTFS volume version: 3.1
Cluster size       : 4096 bytes
Current volume size: 1599996416 bytes (1600 MB)
Current device size: 2019838976 bytes (2020 MB)
New volume size    : 2019832320 bytes (2020 MB)
Checking filesystem consistency ...
100.00 percent completed
Accounting clusters ...
Space in use       : 1335 MB (83.4%)
Collecting resizing constraints ...
WARNING: Every sanity check passed and only the dangerous operations left.
Make sure that important data has been backed up! Power outage or computer
crash may result major data loss!
Are you sure you want to proceed (y/[n])? y
Schedule chkdsk for NTFS consistency check at Windows boot time ...
Resetting $LogFile ... (this might take a while)
Updating $BadClust file ...
Updating $Bitmap file ...
Updating Boot record ...
Syncing device ...
Successfully resized NTFS on device '/dev/sdb1'.

重新掛載並檢查可用空間

[root@Vigor10 mnt]# mount /dev/sdb1 aaa
[root@Vigor10 mnt]# df  /dev/sdb1
檔案系統       1K-區段 已用     可用 已用% 掛載點
/dev/sdb1              1972492   1303228    669264  67% /mnt/aaa


6.救回被刪除的檔案

救援的工作當然包括救回被刪除的檔案,但是在使用這個指令之前還是要再提一次檔案系統上記載檔案的原理,一樣是由inode指向檔案區塊的原理,一旦被刪 除的檔案資料區塊被後來的檔案覆寫,或inode被後來的檔案所使用,先前登記的資料已經抹除,檔案當然救不回來,所以要是誤刪了什麼,要記得儘早進行救 援的動作,因為資料什麼時候會被覆寫,完全沒辦法說的準。

檔案救援必須要在檔案系統沒有被掛載的狀況下才能作業,所以救援的對象是以分割區作為基礎,先使用掃描模式搜尋可救援的檔案,再依照檔案的指定檔案名稱,大小,被刪除的時間,以及可復原的比例將檔案由被救援的分割區讀出來,輸出寫到指定的目錄及檔案名稱上。

[root@Vigor10 media]# ntfsundelete /dev/sdb1
Volume is dirty.
Run chkdsk and try again, or use the force option.

在此例中,一樣也必須使用強制模式

[root@Vigor10 media]# ntfsundelete -f /dev/sdb1
Volume is dirty.
Forced to continue.
Inode    Flags  %age  Date           Size  Filename
---------------------------------------------------------------
16       F...     0%  2010-01-16         0  <none>
17       F...     0%  2010-01-16         0  <none>
18       F...     0%  2010-01-16         0  <none>
19       F...     0%  2010-01-16         0  <none>
20       F...     0%  2010-01-16         0  <none>
21       F...     0%  2010-01-16         0  <none>
22       F...     0%  2010-01-16         0  <none>
23       F...     0%  2010-01-16         0  <none>
27       FN..    59%  2009-11-02 368053317  [MV]소녀시대.-.Genie.(소원을.말해봐).1080p.FMP4.MP3.avi
4967     FN..   100%  2010-02-24   1818509  <none>
4969     FN..   100%  2010-02-24   2921460  <none>
4970     FN..   100%  2010-02-24   4726794  <none>
4971     FN..   100%  2010-02-24   3408396  <none>

Files with potentially recoverable content: 5

列表中第一個欄位是inode號碼。Flag分為4個欄位,第一個欄位表達這是檔案或是目錄(F/D),第二個欄位表達這是不存在的檔案還是現存的檔案 (N/R),第3個欄位在此用一個點表示內容,其實是用來表達檔案是壓縮檔還是加密的檔案(C/E),最後一個欄位如果出現驚嘆號,就表示該檔的檔案資訊 可能已經遺失而無法救援,舉例來說:

『FNC.』表示該inode指向一個檔案,檔案已刪除不在目錄列表中,該檔是壓縮檔。

而ntfsundelete指令
不可以救回壓縮檔及經過加密的檔案
這一點要注意一下。檔名中看到韓文不要奇怪,檔案名稱是以unicode顯示,所以中文日文韓文檔名都可以正常顯示,這個可疑韓國檔案是板橋分校的某位同仁辛苦下載給我鑑賞的,可是我辜負了他的好意把檔案給殺了,請大家不要告訴他。

第3個欄位是可救回的百分比,第4個欄位是刪除檔案的時間,一般來說,也是inode上在檔案刪除時所記載的時間,接著後面是檔案大小及名稱。

現在,更進一步過濾出所需救回的檔案:

[root@Vigor10 media]# ntfsundelete -f -s --time 1d /dev/sdb1
Volume is dirty.
Forced to continue.
Inode    Flags  %age  Date           Size  Filename
---------------------------------------------------------------
4967     FN..   100%  2010-02-24   1818509  <none>
4969     FN..   100%  2010-02-24   2921460  <none>
4970     FN..   100%  2010-02-24   4726794  <none>
4971     FN..   100%  2010-02-24   3408396  <none>

Files with potentially recoverable content: 4

-s就是使用掃描模式,--time 可以在其後指定一段時間,單位可用d|w|m|y,所以一個月之內的寫法就是--time 1m了。
同時在掃描模式中也可以用檔案大小指定過濾條件,用法如 --size 2m-4m,可用單位如(k|m|g|t),指定檔案大小時要用範圍的寫法,如下:

[root@Vigor10 media]# ntfsundelete -f -s --time 1d --size 3m-5m  -p 90 /dev/sdb1
Volume is dirty.
Forced to continue.
Inode    Flags  %age  Date           Size  Filename
---------------------------------------------------------------
4970     FN..   100%  2010-02-24   4726794  <none>
4971     FN..   100%  2010-02-24   3408396  <none>

Files with potentially recoverable content: 2

--size 3m-5m,指定檔案大小是3MB到5MB的大小,-p 90指的是檔按完整的比例超過90%的檔案。

現在將inode號碼4970的檔案救回來,-o 指定輸出的檔案名稱為work.pdf ,-d 指定寫入的目錄是使用者家目錄。

[root@Vigor10 media]# ntfsundelete /dev/sdb1 -f -u -i 4970 -o work.pdf -d ~
Volume is dirty.
Forced to continue.
Inode    Flags  %age  Date            Size  Filename
---------------------------------------------------------------
4970     FN..     0%  2010-02-24   4726794  <none>

Undeleted '(null)' successfully.

[root@Vigor10 media]# ls -l  ~/
總計 4744
-rw------- 1 root root    1448 11月  8 07:19 anaconda-ks.cfg
drwxr-xr-x 3 root root    4096 11月  8 00:07 base
drwxr-xr-x 2 root root    4096  2月 10 06:59 Desktop
-rw-r--r-- 1 root root   61462 11月  8 07:19 install.log
-rw-r--r-- 1 root root    5335 11月  8 07:19 install.log.syslog
-rw------- 1 root root 4730880  2月 24 07:51 work.pdf

救援成功。


希望各位同學有機會好好的試一試,這就是那種考試雖然不會考,知道的人很少,但是卻非常有用的指令,同時還是可以讓你拿去嚇人的『小工具』。

, , , , ,

lccnetvip 發表在 痞客邦 PIXNET 留言(0) 人氣()