2020年12月23日水曜日

仮想ファイルシステムをユーザー権限でマウント

準備


libguestfs-toolsが必要ですので、apt等でインストールしておきます。

ファイルシステムの作成


マウントしてアクセスしたいファイルシステムを作成します。ここでは例として、ディレクトリ1個とファイルが2個あるファイルシステムを作ります。
$ mkdir fs
$ echo "abc" > fs/abc.txt
$ mkdir fs/sub
$ echo "cde" > fs/sub/cde.txt
$ tree
.
├── abc.txt
└── sub
    └── cde.txt

1 directory, 2 files
$ virt-make-fs -t ext4 -s +10M fs fs.img
これで、fs.imgにファイルシステムが作成されます。 -t ext4により、ext4でファイルシステムを作成することを指定しています。軽量なものが良ければ、ext2がよいそうです。 -s +10M により、空き容量を10MB付け加えたファイルシステムを作るよう指定しています。

ファイルシステムのマウント


ファイルシステムが作成できましたので、これをマウントしてみます。マウントポイントはmpとします。ルート権限は不要です。
$ mkdir mp
$ guestmount -a fs.img -m /dev/sda mp
$ tree mp
mp
├── abc.txt
├── lost+found
└── sub
    └── cde.txt

2 directories, 2 files
マウントできました。今回作成したイメージの場合、-mオプションは省略できません。

dfで見てもマウントできていることが確認できます。

$ df -h -t fuse
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/fuse         11M  199K  9.1M    3% /home/xxx/yyy/mp
ファイルの書き込みもできますし、もともと用意していたファイルの表示もできます。
$ cd mp
$ echo "xyz" > xyz.txt
$ cat xyz.txt
xyz
$ cat abc.txt
abc
$ cat sub/cde.txt 
cde

ファイルシステムのアンマウント


アンマウントも簡単にできます。
$ guestunmount mp
$ tree mp
mp

0 directories, 0 files

まとめ


仮想ディスクの作成からマウントし、読み書きして、アンマウントするところまで簡単にできました。 この仕組みを使えば、何かデータを処理したい計算機にファイルシステムごとデータを移動したり、 結果を回収したり、バックアップしたりする作業がお手軽にできそうです。

0 件のコメント :