Files
如何將我的磁碟視為一個大文件?
我正在閱讀 FreeBSD 中的設備文件,但我的理解不是很好。為了練習,我想出了以下場景。我懷疑這個問題可以使用設備文件來解決。
想像一下,我是一名兼職間諜,我需要生成一些一次性便箋簿。我可以去我的安全 FreeBSD 盒子並寫一些
/dev/urandom
到一個 pad 文件,知道來自這個源的隨機性是足夠好(tm)。我的帶有 pad 文件的快閃記憶體驅動器將傳遞給我未來的聯繫人。但是,由於該驅動器將僅包含一個充滿隨機字節的文件,因此將整個文件系統寫入磁碟似乎是一種浪費。為什麼不用隨機數據填滿 USB 呢?
我的問題:如何實現從磁碟讀取和寫入原始數據的目標?我應該指向
dd
磁碟的設備文件嗎?
是的,您可以將設備文件視為原始設備文件,並使用用於訪問普通文件的相同 API 從/向其讀取/寫入數據。在大多數情況下,您可以使用
dd
,或簡單地 cat 數據到/從設備文件。請記住,原始設備和文件系統上的真實文件之間存在一些實際差異:
- 設備具有固定大小。寫入較少的數據將使剩餘空間保持不變。除非您有其他方式來傳達該資訊,否則您無法確定您實際寫入了多少數據。
- 設備沒有權限。代表設備的設備文件具有權限,但這些權限不會隨設備本身一起傳遞,它們只是由設備所連接的系統分配。如果您
chmod
的設備文件代表 USB 驅動器,拔下它,然後將其連接到另一個(或相同)系統,權限更改將不會持續。- 設備沒有名稱,或者至少沒有使用者可更改的名稱。您的作業系統將為您的設備分配任何感覺的設備節點名稱。諸如卷名之類的東西儲存在文件系統或分區表中,當您將整個設備作為原始儲存訪問時,就沒有這樣的東西了。
- 大多數作業系統不會讓隨機的非 root 使用者訪問設備文件,而有些作業系統可能允許非 root 本地使用者掛載諸如 USB 驅動器之類的東西。
(注意:我來自 Linux 背景,但這些概念在任何類 UNIX 系統上都幾乎相同)