Filesystems
無法掛載在循環設備上創建的分區(指向文件)
目標
我正在嘗試使用文件從頭開始製作硬碟映像。這包括 MBR、分區表、分區數量等。雖然我無法讓 Linux 安裝我創建的分區。
編輯:請參閱問題的結尾以進行更新-似乎與 vboxsf 有關
程序
到目前為止,我已經嘗試了許多不同的方法,但那些讓我走得最遠的方法最終都在同一個地方。我在下面製作了一個簡化版本,應該足以解釋我的問題
使用 dd 生成空文件(或截斷速度)
dd if=/dev/zero of=test.img bs=1M count=150
製作分區表
parted -s test.img mklabel gpt Warning: The resulting partition is not properly aligned for best performance.
製作分區
parted -s test.img -- mkpart logical 0 5M parted -s test.img set 1 bios_grub on parted -s test.img -- mkpart logical 5M 50M etc.
掛載為循環設備(使用 max_part=31 載入的循環模組)
losetup /dev/loop0 test.img
lsblk 檢查
loop0 7:0 0 150M 0 loop ├─loop0p1 7:1 0 4.8M 0 loop ├─loop0p2 7:2 0 43M 0 loop └─loop0p3 7:3 0 4M 0 loop
到目前為止一切順利 - 我猜。格式化分區
mkfs.ext4 /dev/loop0p1 mkfs.ext4 /dev/loop0p2 mkfs.ext4 /dev/loop0p3
現在讓我們掛載我們的新分區
[root@localhost vmdk test]# mount /dev/loop0p2 boot mount: /dev/loop0p2 is write-protected, mounting read-only mount: unknown filesystem type '(null)'
這是它結束的地方 - 每次。我嘗試在創建圖像後立即將圖像安裝到循環中,並改為在 /dev/loop0 上呼叫 parted 。這會產生相同的結果。我已經手動嘗試了使用偏移量的 losttup。我已經嘗試過 kpartx - 我無法弄清楚如何超越這一點。
我應該注意,我還使用實際的硬碟驅動器嘗試了此過程(好吧,我使用的是 VM,但您知道我的意思)。在這種情況下,我呼叫了完全相同的命令,但改為使用 /dev/sdb。最後**,我能夠毫無問題地掛載 /dev/sdb2 。**
調試資訊
我不知道它是否相關,但這裡有
[root@localhost vmdk test]# uname -a Linux localhost.localdomain 3.10.0-327.36.2.el7.x86_64 #1 SMP Mon Oct 10 23:08:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux [root@localhost vmdk test]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@localhost vmdk test]# file test.img test.img: x86 boot sector; partition 1: ID=0xee, starthead 0, startsector 1, 307199 sectors, extended partition table (last)\011, code offset 0x0 [root@localhost vmdk test]# file -s /dev/loop0 /dev/loop0: x86 boot sector; partition 1: ID=0xee, starthead 0, startsector 1, 307199 sectors, extended partition table (last)\011, code offset 0x0 [root@localhost vmdk test]# file -s /dev/loop0p2 /dev/loop0p2: data [root@localhost vmdk test]# fdisk -lu /dev/loop0 WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion. Disk /dev/loop0: 157 MB, 157286400 bytes, 307200 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: gpt # Start End Size Type Name 1 34 9765 4.8M BIOS boot parti logical 2 10240 98303 43M Microsoft basic logical 3 98304 106495 4M Microsoft basic logical
當我遵循相同的程序時,我不明白為什麼循環設備的行為與硬碟驅動器的行為方式不同。如果有人有任何想法,他們將不勝感激!
更新
巧合的是,我觀察到重啟解決了我的問題,所以我的思緒立即同步。經過一些測試後,我的問題似乎只發生在 test.img 文件放在我的 vboxsf 掛載(主機和 VM 之間的共享文件夾)上時。我還沒有真正考慮過這一點,但也許它以一種奇怪的方式記憶體文件寫入?我現在將問題懸而未決-也許有人可以詳細說明。
如果圖像文件託管在像 vboxsf 這樣的奇怪文件系統上,這可能是問題所在。