パーティションやフォーマットの練習のためにUSBメモリを買ってくるのはだるい
仮想ファイルシステム的に、ダミーファイルを作ってそれをHDD(ブロック)デバイスとして扱う。
ダミーファイルを作ってコマンドの練習ができます。 fdisk / gdisk / gparted / cfdisk に、cryptsetup や dm-crypt とか、LVMの練習に、mount や mkfs や btrfsを試したり。
過去にLVMやKVM+qemu や windowsなどでもやりました。記事が散財して見つけにくかったので、まとめ直しました。
お品書き
- パーティションやフォーマットの練習のためにUSBメモリを買ってくるのはだるい
- お品書き
- ダミーファイルの作成
- ループバックデバイスとして扱う
- ファイルがブロックデバイス(USBドライブ的)に扱える
- 一つの接続したデバイスとしてのファイルを解除する。
- すべての接続を解除する
- デバイスを使った練習
- コマンドの練習
- この方法で練習できるコマンド
- まとめ
- 次回の予定
ダミーファイルの作成
1GB程度のファイルを作る
dd if=/dev/zero of=out.1GB.img bs=1MiB count=200
実験するなら 1GBでも大きすぎるきもするので、200MiB程度で十分かも
dd if=/dev/zero of=out.1GB.img bs=1MiB count=200
ループバックデバイスとして扱う
sudo losetup -f my.img
ファイルがブロックデバイス(USBドライブ的)に扱える
いくつか、接続した結果がコレです。
takuya@:~$ sudo losetup NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO /dev/loop1 0 0 0 0 /home/takuya/out.2.img 0 /dev/loop2 0 0 0 0 /home/takuya/out.3.img 0 /dev/loop0 0 0 0 0 /home/takuya/out.1.img 0
詳細を見るのは次の方法でも大丈夫です。
takuya@:~$ sudo losetup -a /dev/loop1: [65025]:2104157 (/home/takuya/out.2.img) /dev/loop2: [65025]:2104158 (/home/takuya/out.3.img) /dev/loop0: [65025]:2103459 (/home/takuya/out.1.img)
一つの接続したデバイスとしてのファイルを解除する。
ブロックデバイスの名前を指定して、接続を解除する
takuya@:~$ sudo losetup -d /dev/loop1
接続を解除した結果がこちら。
takuya@:~$ sudo losetup NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO /dev/loop2 0 0 0 0 /home/takuya/out.3.img 0 /dev/loop0 0 0 0 0 /home/takuya/out.1.img 0
すべての接続を解除する
一つずつ解除するのがめんどくさいんで -D / --detach-all
でまとめて解除する・
takuya@:~$ sudo losetup -D
ぜんぶの接続が解除されました。
takuya@:~$ sudo losetup
デバイスを使った練習
mkfs の練習
パーティションを作らずに、シンプルボリューム*1でデバイスを作ってマウントする
mkfs.btrfs でフォーマットとマウントの練習
めったに使わない btrfs でもこれで練習ができる。
takuya@:~$ sudo mkfs.btrfs /dev/loop1 btrfs-progs v4.7.3 See http://btrfs.wiki.kernel.org for more information. Performing full device TRIM (200.00MiB) ... Label: (null) UUID: Node size: 16384 Sector size: 4096 Filesystem size: 200.00MiB Block group profiles: Data: single 8.00MiB Metadata: DUP 32.00MiB System: DUP 8.00MiB SSD detected: no Incompat features: extref, skinny-metadata Number of devices: 1 Devices: ID SIZE PATH 1 200.00MiB /dev/loop1
マウントしてみる。
takuya@:~$ sudo mount -t btrfs /dev/loop1 ./mnt takuya@:~$ df ./mnt/ ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置 /dev/loop1 204800 16640 121856 13% /home/takuya/mnt
コマンドの練習
これで、気にせずに実験ができるのでガンガンいこうぜ!
パーティションの作成と削除
gdisk /dev/loop1
fdisk /dev/loop1
cfdisk /dev/loop1
パーティションを作った結果を確認した状態
takuya@:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 200M 0 loop loop1 7:64 0 200M 0 loop └─loop1p1 7:65 0 199M 0 loop
/dev/loop1にパーティションを作ると loop1p1 が作られる。わかりやすい。
フォーマットしてみる
フォーマットするコマンドをあれこれ試してみると楽しいかもしれない
mkfs.bfs mkfs.btrfs mkfs.cramfs mkfs.exfat mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.fat mkfs.minix mkfs.msdos mkfs.ntfs mkfs.vfat
NTFSの場合。
takuya@:~$ sudo mkfs.ntfs /dev/loop1p1 The partition start sector was not specified for /dev/loop1p1 and it could not be obtained automatically. It has been set to 0. The number of sectors per track was not specified for /dev/loop1p1 and it could not be obtained automatically. It has been set to 0. The number of heads was not specified for /dev/loop1p1 and it could not be obtained automatically. It has been set to 0. Cluster size has been automatically set to 4096 bytes. To boot from a device, Windows needs the 'partition start sector', the 'sectors per track' and the 'number of heads' to be set. Windows will not be able to boot from this device. Initializing device with zeroes: 100% - Done. Creating NTFS volume structures. mkntfs completed successfully. Have a nice day. takuya@:~$ sudo mount -t ntfs /dev/loop1p1 ./mnt
この方法で練習できるコマンド
ディスクを取り扱ううえで、練習するコマンドもこの手法で練習できそうだ
- dump
- dd
- dd_rescue
- gdisk / fdisk / cfdisk など
- parted
- LVM
- mdadm ( RAID )
- dm-crypt ( LUKS )
ソフトRAIDとLVMの組み合わせなどめんどくさいこともぱぱっと試せそう。RAID on LVM や LVM on RAID とか。LUKS on LVMや LVM on LUKS とかもできそうですね。
chrootなども合わせて起動ディスクイメージ作成や、grub修正などもこの方法を知ってると楽。
まとめ
ブロックデバイスをファイルとして作ってフォーマットをしたりパーティションを作ったり練習する事ができることがわかった。
Linux のブロックデバイスの扱いになれるには、アレコレの方法があると思うんだけど、私の知る限りでは、losetupとddを組み合わせるのが一番手軽だと思います。
まさか、フォーマットの練習のためだけに、VmwareやVirtualBox持ち出してパーティションを作る練習をするわけにも行かないし。手順も多く覚えることが多すぎてね。
ただし、ブロックデバイスとファイルの違いやファイルが何をしているかを知らないと混乱することになるので、完全な初心者にはおすすめできないのが難点。
fdisk は直接ファイルをいじれるし、mount も直接ファイルをマウントできたりするんだけど、いったんloopデバイスに取り付けちゃうと通常のSSD/HDDと変わらず扱いができるので迷わないですむし、覚えることも減る。
次回の予定
次回は、暗号化ディスクを作る練習をコレでやってみたいと思います。