Lvmスナップショットデバイスをマウントしようとすると、エラーが発生します。
$ Sudo mount -o loop /dev/mapper/matrix-snap--of--core /home/me/mountpoint
mount: /home/me/mountpoint: mount(2) system call failed: File exists.
- 「ファイルが存在する」とは何ですか。私に伝えようとしているエラー?
- Lvmスナップショットデバイスをマウントするにはどうすればよいですか?
前回チェックしたのは2018年10月でしたが、mountコマンドは「以前は常に機能していました」。同様のエラーが 年前の質問 で発生しました。ただし、エラーメッセージは少し異なり、2019年になりました…
これはlsblk
の私の出力です。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.8G 0 disk
└─sda1 8:1 0 465.8G 0 part
└─core 254:0 0 465.8G 0 crypt
├─matrix-swapvolume 254:1 0 4G 0 lvm [SWAP]
└─matrix-core-real 254:3 0 461.8G 0 lvm
├─matrix-core 254:2 0 461.8G 0 lvm /
└─matrix-snap--of--core 254:5 0 461.8G 0 lvm
sdb 8:16 1 59.5G 0 disk
└─matrix-snap--of--core-cow 254:4 0 59.5G 0 lvm
└─matrix-snap--of--core 254:5 0 461.8G 0 lvm
Parabola Linuxを実行していますが、システムは最新です。論理ボリューム/dev/matrix/core
はbtrfs
を使用していますが、これはエラーと関係があると思われます。これはuname -rvs
の私の出力です。
Linux 5.2.5-gnu-1 #1 SMP PREEMPT Sun Aug 4 02:02:20 UTC 2019
(LVMスナップショットデバイスは元のディスクデバイスと同じくらい良いので、なぜ_-o loop
_マウントオプションを使用しているのかわかりません。)
「ファイルが存在します」は、errno
値17、またはEEXIST
の標準の英語テキストで、_#include <errno.h>
_で名前が付けられています。
そのエラー結果はmount(2)
システムコールでは文書化されていないため、ソースコードを少し読む必要があります。
elixir.bootlin.comのLinuxカーネル相互参照 は、カーネルコードでEEXISTが使用されているすべての場所を一覧表示できます。 btrfs
ファイルシステムをループマウントしようとしているため、関連する可能性がある場所は次のとおりです。
drivers/block/loop.c
_、ループデバイス管理に関連fs/btrfs/super.c
_、btrfs
ファイルシステムをマウントするときに使用されます。_drivers/block/loop.c
_では、すでに使用されている特定のループデバイスを割り当てようとすると、EEXIST
エラーが生成されます(例:_mount -o loop=/dev/loop3 ...
_および_/dev/loop3
_はすでに使用されています) 。しかし、mountコマンドで何かが競合状態を引き起こしていない限り、ここでは問題になりません。
_fs/btrfs/super.c
_には、実際には、エラーコードをエラーメッセージに変換するためのbtrfs
固有の関数があります。 EEXIST
を_Object already exists
_に変換します。
あなたはすでにマウントされているbtrfs
ファイルシステムのクローンのように見えるものをマウントしようとしているので、それは実際に理にかなっています:歴史的に、これはbtrfs
を混乱させるために使用されました(賢明に)ある時点で追加されました。
btrfs
の組み込みスナップショット機能で作成されたスナップショットとは対照的に、これはLVMレベルスナップショットのように見えるので、 Originファイルシステムがマウントされているときにマウントしたい場合は、スナップショットをクローンファイルシステムのように扱います。実際の1:1クローンではなく、LVMだけがスナップショットであることを「認識」します。したがって、元のシステムと同じシステムにマウントする必要がある場合は、スナップショット/クローンファイルシステムのメタデータUUIDを変更する必要があります。
警告:btrfs
の経験があまりないので、以下の記述は間違っているか不完全かもしれません。
カーネルが5.0より新しいため、_btrfstune -m /dev/mapper/matrix-snap--of--core
_を使用して変更を加えることができます。そうでない場合は、ファイルシステムスーパーブロックの_btrfstune -u /dev/mapper/matrix-snap--of--core
_フィールドだけでなく、すべてのファイルシステムメタデータを更新する必要があるため、速度が遅くなる_metadata_uuid
_を使用する必要があります。
エラーは、デバイスがすでに別の場所にマウントされている場合に発生します。最初にアンマウントする必要があります。次に、新しいマウントを作成します。