如何使用 t_reader 公用程式
Summary: 本文說明如何在各種作業系統上使用 t_reader 和 t_writer 公用程式,以及下載位置。
Symptoms
- 必須判斷磁帶上的實際區塊大小
- 必須驗證 NetWorker 標籤結構
- 必須驗證磁帶介質的物理完整性
- 必須確認 NetWorker 區塊標頭中繼資料
- 必須轉儲每個區塊前 512 個位元組的原始
可使用 t_reader 公用程式可用來診斷和故障診斷磁帶機相關問題。它也是 NetWorker 支援,可提供多種磁帶功能,使其成為實用的故障診斷工具。使用它來:
- 測試寫入磁帶的塊的實際大小
- 判斷寫入磁帶的區塊大小是否有不同
- 測試讀取實體媒體是否有 I/O 錯誤或實體損壞
- 確定應用程式層下的元素(驅動程式、作業系統、傳輸、設備本身)是否可以讀取特定大小的塊
- 在 Windows 中公開任何其他目前公用程式都無法顯示的低層級資訊
Cause
磁帶介質的問題通常是由外部因素引起的,例如:
- OS/HBA/驅動程式阻塞因素問題
- 寫入期間未偵測到 I/O 硬體或傳輸錯誤
- 由於使用、磁碟機衛生或存放不當導致的媒體效能降低
Resolution
下載 t_reader 從這裡:NetWorker 工具
解壓縮套裝,並使用 t_reader 用於主機的體系結構。
t_reader不會在 UNIX 上自動倒帶音量(它在 Windows 上提供) - 這允許您定位到磁帶上的任何位置並從磁帶上的任何位置開始。- 在大多數作業系統上
t_reader報告從此點找到的塊大小;有些需要您嘗試讀取的塊大小。 t_reader從 0 開始枚舉檔和記錄 - 這意味著如果您要向前移動到檔 5,請故意記錄 500,然後運行t_reader-t_reader輸出似乎從 F0 R0 開始,儘管實際上從更晚的地址開始。- 在可判斷實際區塊大小的作業系統上,驅動程式或作業系統中的區塊大小限制會導致錯誤,指出緩衝區太小,無法容納區塊資料,例如
cannot allocate memory或more data is available。 t_reader不需要讀取實際資料,但可以識別並讀取 NetWorker 標籤 (如果有的話)- 在 Windows 上,它還可以讀取和報告塊頭資訊(如果可用);它還可以轉儲前 512 個原始位元組的數據(請參閱下面的變數)
- Always - 區塊大小必須在第一對 32 KB 標籤區塊之後一致,並且必須與掃描器傳回寫入標籤的區塊大小相符
UNIX
要先倒帶來準備卷:
mt -f /dev/nst0 rewind
要執行 t_reader,提供載入磁帶匣的驅動器的作業系統設備檔句柄,例如:
./t_reader_linux /dev/nst0
倒帶後,標準 NetWorker 磁碟區的輸出如下所示:
About to read FileNo-BlockNo: 0-0 Found block size: 32768 About to read FileNo-BlockNo: 0-1 EOF encountered About to read FileNo-BlockNo: 1-0 Found block size: 32768 About to read FileNo-BlockNo: 1-1 EOF encountered About to read FileNo-BlockNo: 2-0 Found block size: 98304 About to read FileNo-BlockNo: 2-1 Found block size: 98304 ... About to read FileNo-BlockNo: 19-0 Found this record at block size= 98304 About to read FileNo-BlockNo: 19-1 File Mark encountered About to read FileNo-BlockNo: 20-0 File Mark encountered No more data is on Tape
此示例演示了一個健康的卷,前兩個檔上有兩個 32K 塊指示標籤,後跟 96K 塊,這些塊定期被文件標記打斷,直到檔 18 之後遇到數據結束 (EOD)。
視窗
針對 Windows,您也必須提供您要讀取的區塊大小:
t_reader \\.\tape0 131072
這樣做的效果是Windows嘗試讀取提供的任何塊大小,而不是抱怨(儘管可能大於寫入的實際塊大小) - 儘管如果作為參數提供的塊大小小於實際塊,或者存在操作系統或驅動程式限制,使該大小的塊無法使用,則會出錯。
由於 Windows 無法自動確定和報告塊大小,因此必須將其作為第二個參數提供。如果塊大小太大,它會誤報,因為它只是讀取多個塊並將它們呈現為參數提供的大小。如果提供的區塊大小 (例如 131072) 小於 實際 區塊大小,例如 262144,您會收到錯誤:
>>>>>File Mark Encountered. Total Records Estimated In File 1 Are 1 Read Record does not align on Assigned Buffer
因此,為了正確確定未知塊大小,請從 32768 開始,然後加倍,直到實用程式成功。但是,您通常可以從標籤確定 預期的 塊大小。
Windows還有兩個變數,可以設置為更深入的調試:
set EXPLODE_LEVEL=1
原因 t_reader 若要報告找到的任何 NetWorker 區塊的區塊標題:
Read 262144 bytes: HW Fn-Rn:2-81 Media Fn-Rn:2-81 Cummulative Bytes Read 21561344 mr_version 6 mr_size 262144 Volid 4222551389 (0xFBAF055D) Media Fn 2-Media Rn 81 mr_len 444 mr_chunk_len 1
致 t_reader 要轉儲每個塊的前 512 B,請讀取:
set DUMP_BUFFER=1
預期輸出如下:
Read 262144 bytes: HW Fn-Rn: 2-47 Cummulative Bytes Read 12648448 Dumping 512 Bytes Starting At Address: 0x 850048 0x0000: 56 4F 4C 31 51 30 57 30 50 53 20 20 20 20 20 20 0x0010: 20 20 20 20 20 4E 45 54 57 4F 52 4B 45 52 20 20 0x0020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0x0030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0x0040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0x0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...
這可允許進行更深入的除錯,或證明非 NetWorker、受損或加密的磁碟區,但顯然適用於不常見的用途。
Additional Information
t_reader 還捆綁了一個配套實用程式, t_writer.exe。這是僅限 Windows 的公用程式,會取代 tar 和 dd 等 UNIX 公用程式,並可讓測試寫入以自訂區塊大小執行至磁帶。它需要隨附的檔、seeding.image 或任何同名的二進位檔。
要使用該實用程式,請使用媒體載入的設備作為第一個參數,並使用所需的塊大小(以位元組為單位)作為第二個參數來運行它,例如:
win_t_writer.exe \\.\Tape2147483639 131072
公用程式會一直執行,直到使用者中斷程序為止。它可以在具有不同區塊大小的相同磁碟區上連續執行,以模擬不同的區塊大小,如果懷疑發生隨機 I/O 錯誤或 SCSI 重設,則可重複執行直到失敗為止。它還可用於演示條件是否截斷了應用層下方的塊大小。
作為輸出的範例:
C:\Users\Administrator\t_reader>win_t_writer.exe \\.\Tape2147483639 131072
CAUTION: This Is An Un-Supported Tool. To Be Used By Tech. Support Personnel Only
For Comments or Change Requests, email: abid.yazdanie@emc.com
******WARNING Tape Write operations will occur on the device******
******Data Destruction Will Occur******
******You are using this tool at your own risk******
usage: win_t_writer \\.\tapeX 131072
Where tapeX is \\.\tapeX and 131072 (128X1024) is the desired block size, in this case 128K
The Block Size Used Above Is Only An Example.
Run mt -f \\.\tapeX status To Find The Max. Block Size For Your Tape Drive
Enter y to proceed or n to abort: y
Proceeding to write....
About to allocate write buffer
Opening Seeding File seeding.image
Copying Contents Of Seeding File: seeding.image To Write Buffer
WRITE access to device \\.\\\.\Tape2147483639
Successfully opened device: \\.\\\.\Tape2147483639
Calling WriteFile in a perennial loop...