ターゲット
ファイルを使用して最初からハードドライブイメージを作成しようとしています。これには、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を呼び出してみました。これは同じ結果をもたらします。 Lostupを使用して手動でオフセットしようとしました。私はkpartxを試しました。この問題を克服する方法がわかりません。
実際のハードドライブを使ってこのプロセスも試みたことを指摘したいと思います(仮想マシンを使用していますが、どういう意味か分かります)。この場合、まったく同じコマンドを呼び出しますが、/ 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マウント(ホストと仮想マシン間の共有フォルダ)に配置されている場合にのみ問題が発生するようです。私はこれについて実際には考えていませんが、ファイルの書き込みを奇妙な方法でキャッシュするのではないでしょうか?今は質問を開いておきます。誰かが詳細に説明できるでしょう。
答え1
イメージファイルが奇妙なファイルシステム(vboxsfなど)でホストされている場合、問題が発生する可能性があります。