Filesystems

無法掛載在循環設備上創建的分區(指向文件)

  • February 20, 2017

目標

我正在嘗試使用文件從頭開始製作硬碟映像。這包括 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 這樣的奇怪文件系統上,這可能是問題所在。

引用自:https://unix.stackexchange.com/questions/345831