Ubuntu 資料一覧
2014/08/04更新
対応バージョン: 14.04
ファイルシステムを作る場合、普通は物理的なHDDや論理ボリュームなどを用意するが、一般的なファイルをループバックデバイスを用いてマウントすることで簡単にファイルシステムを作ることができる。
この方法は一時的にファイルシステム固有の仕様を調べる時などに便利である。
ここではext4上のファイルをXFSに仕立ててみる。
パッケージインストール
まずパッケージをインストールする。
% sudo apt-get install xfsprogs
これでファイルシステムを作成する/sbin/mkfs.xfsをはじめ、/sbinと/usr/sbinに各種管理ツール(xfs*)がインストールされる。
XFSのバックアップ/リストア用のコマンド(xfsdump/xfsrestore)を使いたい場合はxfsdumpパッケージもインストールする。
空ファイル作成
まずddで任意のサイズの空ファイルを作る(ここでは1MB x 100回 = 100MB)。
% cd /var/tmp % dd if=/dev/zero of=dummy.xfs bs=1M count=100 % ls -l dummy.xfs -rw-rw-r-- 1 neo neo 104857600 8月 04 13:40 dummy.xfs % file dummy.xfs dummy.xfs: data
フォーマット
作成されたファイルをXFSでフォーマットする。
% mkfs -t xfs dummy.xfs meta-data=dummy.xfs isize=256 agcount=4, agsize=6400 blks = sectsz=512 attr=2, projid32bit=0 data = bsize=4096 blocks=25600, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal log bsize=4096 blocks=1200, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 % file dummy.xfs dummy.xfs: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
マウント
ループバックデバイスを用いてマウントする。
% sudo mkdir /mnt/xfs % sudo mount -t xfs -o loop dummy.xfs /mnt/xfs % sudo chmod 1777 /mnt/xfs % mount | grep xfs /var/tmp/dummy.xfs on /mnt/xfs type xfs (rw) % df /mnt/xfs Filesystem 1K-blocks Used Available Use% Mounted on /dev/loop0 97600 5280 92320 6% /mnt/xfs % df -i /mnt/xfs Filesystem Inodes IUsed IFree IUse% Mounted on /dev/loop0 102400 3 102397 1% /mnt/xfs % xfs_info /mnt/xfs meta-data=/dev/loop0 isize=256 agcount=4, agsize=6400 blks = sectsz=512 attr=2 data = bsize=4096 blocks=25600, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=1200, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
尚、ループバックデバイスが使えるかどうかは/proc/devicesを見ればよい。左の番号はデバイスのメジャー番号である。
% cat /proc/devices : Block devices: : 7 loop : % ls -l /dev/loop? brw-rw---- 1 root disk 7, 0 8月 4 15:59 /dev/loop0 brw-rw---- 1 root disk 7, 1 8月 4 13:20 /dev/loop1 brw-rw---- 1 root disk 7, 2 8月 4 13:20 /dev/loop2 brw-rw---- 1 root disk 7, 3 8月 4 13:20 /dev/loop3 brw-rw---- 1 root disk 7, 4 8月 4 13:20 /dev/loop4 brw-rw---- 1 root disk 7, 5 8月 4 13:20 /dev/loop5 brw-rw---- 1 root disk 7, 6 8月 4 13:20 /dev/loop6 brw-rw---- 1 root disk 7, 7 8月 4 13:20 /dev/loop7
テスト
ここではXFS特有の機能をいくつか使ってみる。
ファイルシステム一時停止
xfs_freezeコマンドによりファイルシステムを一時停止させることができる。
% sudo xfs_freeze -f /mnt/xfs
この状態で何かファイルを作ったり更新したりしようとしても待たされる。
% touch /mnt/xfs/test <- 待たされる
一時停止を解除すれば待たされていた処理は実行される。
% sudo xfs_freeze -u /mnt/xfs
バックアップ、リストア
バックアップとリストアにはxfsdumpとxfsrestoreを使用する。
まずバックアップを試してみる。
-lオプションでダンプレベル(0-9)を指定し、-fオプションでバックアップ先デバイスを指定する(ファイルも可)。
% sudo xfsdump -l 0 -f backup.dmp /mnt/xfs xfsdump: using file dump (drive_simple) strategy xfsdump: version 3.1.1 (dump format 3.0) - type ^C for status and control ======================= dump label dialog ======================== please enter label for this dump session (timeout in 300 sec) -> full backup <- 任意のラベル名を付ける session label entered: "full backup" --------------------------- end dialog --------------------------- xfsdump: level 0 dump of k1:/mnt/xfs xfsdump: dump date: Mon Aug 4 16:13:59 2014 xfsdump: session id: d2c67c66-e997-4de8-87a9-d912bdecbc6f xfsdump: session label: "full backup" xfsdump: ino map phase 1: constructing initial dump list xfsdump: ino map phase 2: skipping (no pruning necessary) xfsdump: ino map phase 3: skipping (only one dump stream) xfsdump: ino map construction complete xfsdump: estimated dump size: 21120 bytes xfsdump: /var/lib/xfsdump/inventory created ======================= media label dialog ======================= please enter label for media in drive 0 (timeout in 300 sec) -> full backup media <- 任意のメディアラベル名を付ける media label entered: "full backup media" --------------------------- end dialog --------------------------- xfsdump: creating dump session media file 0 (media 0, file 0) xfsdump: dumping ino map xfsdump: dumping directories xfsdump: dumping non-directory files xfsdump: ending media file xfsdump: media file size 21328 bytes xfsdump: dump size (non-dir files) : 0 bytes xfsdump: dump complete: 62 seconds elapsed xfsdump: Dump Summary: xfsdump: stream 0 /var/tmp/backup.dmp OK (success) xfsdump: Dump Status: SUCCESS % ls -l /var/tmp/backup.dmp -rw-r--r-- 1 root root 21328 8月 4 16:15 /var/tmp/backup.dmp % file /var/tmp/backup.dmp /var/tmp/backup.dmp: xfsdump archive (version 3)
バックアップ情報は/var/lib/xfsdump/inventory配下に保存される。内容を確認するにはxfsrestoreの-Iオプションを使用する。
% xfsrestore -I file system 0: fs id: 252b9f88-d7a3-455b-918d-992c92cc0407 session 0: mount point: k1:/mnt/xfs device: k1:/dev/loop0 time: Mon Aug 4 16:13:59 2014 session label: "full backup" session id: d2c67c66-e997-4de8-87a9-d912bdecbc6f level: 0 resumed: NO subtree: NO streams: 1 stream 0: pathname: /var/tmp/backup.dmp start: ino 131 offset 0 end: ino 132 offset 0 interrupted: NO media files: 1 media file 0: mfile index: 0 mfile type: data mfile size: 21328 mfile start: ino 131 offset 0 mfile end: ino 132 offset 0 media label: "full backup media" media id: bcbe47ed-258c-4e40-8449-7ffa7fff3269 xfsrestore: Restore Status: SUCCESS
このバックアップ情報を削除するには単に/var/lib/xfsdump/inventoryをディレクトリ毎削除すればよい。
次にリストアを試してみる。
上記で確認したようにバックアップ毎にsession idが一意に付与されるので、リストア時にはこのsession idを指定する。
% rm /mnt/xfs/test <- 最初に作ったテストファイルを削除する % sudo xfsrestore -f /var/tmp/backup.dmp -S d2c67c66-e997-4de8-87a9-d912bdecbc6f -r /mnt/xfs xfsrestore: using file dump (drive_simple) strategy xfsrestore: version 3.1.1 (dump format 3.0) - type ^C for status and control xfsrestore: using online session inventory xfsrestore: searching media for directory dump xfsrestore: examining media file 0 xfsrestore: reading directories xfsrestore: 1 directories and 1 entries processed xfsrestore: directory post-processing xfsrestore: restoring non-directory files xfsrestore: restore complete: 0 seconds elapsed xfsrestore: Restore Summary: xfsrestore: stream 0 /var/tmp/backup.dmp OK (success) xfsrestore: Restore Status: SUCCESS % ls -l /mnt/xfs -rw-rw-r-- 1 neo neo 0 8月 4 16:11 test drwx------ 2 root root 73 8月 4 16:23 xfsrestorehousekeepingdir/
リストア前に削除したファイルが復元されていること、また管理情報を格納するためのxfsrestorehousekeepingdirディレクトリが作成されている。
% sudo ls -l /mnt/xfs/xfsrestorehousekeepingdir -rw------- 1 root root 4152 8月 4 16:23 dirattr -rw------- 1 root root 0 8月 4 16:23 dirextattr -rw------- 1 root root 4111 8月 4 16:23 namreg -rw------- 1 root root 24576 8月 4 16:23 state -rw------- 1 root root 58753024 8月 4 16:23 tree
その他、XFSにはいろいろな機能があるがここでは割愛する。