如何在 Linux 中掛載 ISO 和其他圖像文件類型?

已發表: 2018-09-06

是否曾經需要檢查圖像文件的內容? 也許你忘記了那個 Linux 發行版的版本。 仔細檢查圖像可能有很多原因,但是如何在不刻錄圖像的情況下做到這一點? 讓我們找出來,不需要額外的軟件。

每個精通技術的 Linux 用戶都應該熟悉mount命令。 它是一般系統管理的一個非常重要的部分。 但是,許多人不知道mount命令實際上比乍一看更強大。

在 Linux 中掛載鏡像文件

我們可以快速輕鬆地掛載,不僅是 ISO 映像,甚至是帶有分區的磁盤映像。

很快,這裡是一個掛載 ISO 文件的例子。

mount -o loop disk_image.iso /path/to/mount/dir

這裡-o標誌用於傳遞掛載選項,在這種情況下,我們告訴掛載我們要使用環回設備掛載映像。 環回設備是一個非常好的概念,用於幫助安裝圖像文件。 回送設備是充當中間人的軟件偽設備,它允許系統將文件視為塊設備,例如 CDROM 驅動器、硬盤驅動器等。這樣做,我們在處理時具有更大的靈活性使用文件,例如執行文件系統功能(假設存在底層塊設備)

這很酷,但誰甚至不再使用 ISO,對吧? 好吧, mount也可以做得更多。 如果您有一個硬盤驅動器的映像文件(從 dd 或類似的東西獲得) ,我們稱之為 hdd.img,那麼您實際上也可以在其中安裝文件系統。 如果您懷疑我們需要再次使用環回設備,那麼您就在正確的軌道上。

但如果你試試這個……

mount -o loop hdd.img /path/to/mount/dir

你不會有太多的運氣。

那是因為大多數磁盤都有分區表。 CD 和 DVD 通常沒有分區表,因為它不適合它們的用例。 當mount開始掛載一個卷時,它期望遇到的是一個文件系統,而不是一個分區表。

但這並不意味著它不能完成。 為了掛載文件系統,我們必須告訴掛載它在映像文件中的位置,並將一條信息傳遞給掛載選項。 mount需要的信息就是分區的偏移量,也就是分區開始的鏡像文件的字節數。 有多種方法可以解決這個問題,但fdisk會為您完成這項工作。

fdisk -l hdd.img

假設, fdisk告訴我們起始扇區是 100 (這純粹是一個示例,在您的特定情況下這不太可能是正確的) 。 我們現在要做的是獲取該扇區號並將其乘以從中獲取映像的 HDD 的扇區大小,這(很可能)在舊驅動器上為 512 字節,在較新驅動器上可能為 4096 (4K) ,但是您應該在克隆驅動器時始終檢查這一點(也許將其放入文件名中以更好地衡量) 。 扇區大小是每個扇區的字節數。

為簡單起見,我們將使用 512 字節的扇區大小,這將為我們提供 51,200 的偏移量。 此偏移量是文件系統開始的映像中的字節數。 知道了這一點,我們就可以準確地告訴mount在哪裡找到文件系統。

mount -o ro,loop,offset=51200 hdd.img /path/to/mount/dir

注意:我還在這個示例中添加了ro選項,以展示如何將文件系統安裝為只讀。 這在取證應用程序中特別有用,在這些應用程序中,您不能出於安全甚至法律問題而乾擾數據完整性。 通常,將使用稱為 write-blocker 的特殊適配器從磁盤創建映像文件,該適配器實際上會阻止所有寫入命令並且只允許讀取命令。

數學和所有方面的工作量相當大,但一定有更簡單的方法,對吧? 這取決於您使用的 Linux 發行版的最新程度,但過去五年左右的任何東西都應該沒有任何問題。

工具losttup用於設置環回設備。 您可能想知道為什麼要手動設置環回設備,而mount會為您處理所有這些。 還記得 mount 因為那個煩人的分區表而不想掛載整個磁盤映像嗎? 好吧,鑑於分區表包含有關分區所在位置的所有數學信息(fdisk 獲取所有信息的位置) ,讓系統引用它會容易得多。 我們可以簡單地為整個磁盤映像創建一個環回設備,然後告訴系統掃描新創建的環回設備上的分區。

losttup -f hdd.img

注意:傳遞給losttup-f標誌只是告訴它創建一個名稱尚未使用的環回設備,例如/dev/loop1 if /dev/loop0 is already in use 。 或者,您可以傳遞一個設備名稱,例如/dev/loop0 ,如果該設備不存在, losetup將創建它,如果存在,它將重新分配給新指定的圖像文件。

如果命令成功,您將在/dev/下看到新創建的環回設備。 現在,您可以使用

partprobe /dev/loopback0

要么

kpartx -u /dev/loopback0

如果您分別安裝了partprobekpartx 。 不過, parted應該安裝在大多數現代 Linux 發行版上。

完成此操作後,您應該會在/dev/中看到類似/dev/loop0p1的內容。 這是您的分區,您可以輕鬆地安裝它。

掛載 /dev/loop0p1 /path/to/mount/dir

您可能會注意到,不需要環回。 那是因為我們已經處理好了。

不過,我們可以通過在losttup中添加一個標誌來使這更容易。

losttup -f -P hdd.img

我們使用的-P標誌實際上告訴losttup讓內核掃描分區表,因此我們可以跳過安裝我們想要的分區。

使用上述,您可以掛載各種磁盤映像。 不管它們來自光學媒體、USB 密鑰、MBR 分區還是 GPT。 Linux 內核可以處理許多不同的分區表和文件系統,您將很難找到它不支持的東西。

當然,可能有一些工具可以讓這變得更容易,但其中的樂趣在哪裡? 我已經在數據恢復和一般系統管理中使用了這些技術,並且像任何類型的知識一樣,它在需要時非常有價值。

如果您有任何技巧可以補充這些技巧,請在下面的評論中告訴我們。

另請閱讀: