btrfsをカーネルに組み込む
btrfsは現在EXPERIMENTALなので注意して利用してください、HDDを初期化しますのでご自分の責任において実行してください、責任はとれませんのでご注意を...カーネルでbtrfsが使えるように設定する、実行環境はGentoo Linuxなので他のディストリビューションの方はその通りにやってください
Kernel: Linux karky7 3.6.5-gentoo #9 SMP Arch: Intel(R) Core(TM) i7-2620M CPU @ 2.70GHz GenuineIntel GNU/Linux
カーネルオプションを設定、カーネル組み込み、モジュールでもいいのでfilesystemのオプションを設定してカーネルをコンパイルしておく、rebootを忘れずに
File systems ---> <M> Btrfs filesystem (EXPERIMENTAL) Unstable disk format
カーネルオプション画像
モジュールで作成した場合は以下のようにmodprobeでカーネルに読み込んでおく
karky7 ~ # modprobe btrfs karky7 ~ # lsmod | grep btrfs btrfs 2061160 0 zlib_deflate 44485 1 btrfs karky7 ~ # dmesg ... ... Btrfs loadedモジュールが読み込まれていることを確認
btrfsユーティリティプログラムをビルドする
btrfs関連のコマンドを利用するため以下のパッケージをインストールするkarky7 ~ # emerge -pv sys-fs/btrfs-progs .. .. Calculating dependencies... done! [ebuild R ] sys-fs/btrfs-progs-0.19.11 0 kB ... ... karky7 ~ # emerge sys-fs/btrfs-progs
btrfsを構築する
まず、/dev/sdbをbtrfsに初期化する、オプションは- L: ラベル
- m: metadataの保存アルゴリズムにraid10を使用
- d: dataの保存アルゴリズムにraid10を使用
でメタデータとデータの冗長性を確保する、/dev/sdb1、/dev/sdb2、/dev/sdc1、/dev/sdc2、はそれぞれ100GBのスライスで作ってある
karky7 ~ # mkfs.btrfs -L bt1 -m raid10 -d raid10 /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2 WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL WARNING! - see http://btrfs.wiki.kernel.org before using adding device /dev/sdb2 id 2 adding device /dev/sdc1 id 3 adding device /dev/sdc2 id 4 fs created label bt1 on /dev/sdb1 nodesize 4096 leafsize 4096 sectorsize 4096 size 400.00GB Btrfs Btrfs v0.19 karky7 ~ #
btrfsの情報を見る
karky7 ~ # btrfs filesystem show --all-devices Label: 'bt1' uuid: 2dcc9b0a-f838-414b-aa38-069043e65709 Total devices 4 FS bytes used 28.00KB devid 2 size 100.00GB used 2.01GB path /dev/sdb2 devid 1 size 100.00GB used 2.03GB path /dev/sdb1 devid 4 size 100.00GB used 2.01GB path /dev/sdc2 devid 3 size 100.00GB used 2.01GB path /dev/sdc1 Btrfs Btrfs v0.19 karky7 ~ #
btrfsをマウントする
karky7 ~ # mkdir /mnt/btrfs karky7 ~ # mount -t btrfs /dev/sdb1 /mnt/btrfs
subvolumeを作成
karky7 ~ # btrfs subvolume create /mnt/btrfs/dir1 Create subvolume '/mnt/btrfs/dir1' karky7 ~ # btrfs subvolume create /mnt/btrfs/dir2 Create subvolume '/mnt/btrfs/dir2' karky7 ~ # ls -l /mnt/btrfs/ total 0 drwxr-xr-x 1 root root 0 Nov 4 23:06 dir1 drwxr-xr-x 1 root root 0 Nov 4 23:06 dir2 karky7 ~ #とりあえずディレクトリができるだけ
Snapshotをとってみる
ファイルを/mnt/btrfs/dir1に適当においてからスナップショットをとってみる、dir1のスナップがdir1_snapディレクトリに出来るkarky7 ~ # cp /etc/*.conf /mnt/btrfs/dir1/ karky7 ~ # ls /mnt/btrfs/dir1 GeoIP.conf dhcpcd.conf eix-sync.conf gai.conf host.conf ltrace.conf mdadm.conf nsswitch.conf rc.conf rsyncd.conf tmux.conf ca-certificates.conf dispatch-conf.conf etc-update.conf genkernel.conf idmapd.conf make.conf mke2fs.conf ntp.conf redis.conf sandbox.conf whois.conf colord.conf e2fsck.conf fuse.conf gentwoo.conf ld.so.conf man.conf nscd.conf prelink.conf resolv.conf sysctl.conf karky7 ~ # karky7 ~ # btrfs subvolume snapshot /mnt/btrfs/dir1 /mnt/btrfs/dir1_snap Create a snapshot of '/mnt/btrfs/dir1' in '/mnt/btrfs/dir1_snap' karky7 ~ # karky7 ~ # ls -l /mnt/btrfs/ total 0 drwxr-xr-x 1 root root 708 Nov 4 23:10 dir1 drwxr-xr-x 1 root root 708 Nov 4 23:10 dir1_snap drwxr-xr-x 1 root root 0 Nov 4 23:06 dir2 karky7 ~ # ls /mnt/btrfs/dir1_snap/ GeoIP.conf dhcpcd.conf eix-sync.conf gai.conf host.conf ltrace.conf mdadm.conf nsswitch.conf rc.conf rsyncd.conf tmux.conf ca-certificates.conf dispatch-conf.conf etc-update.conf genkernel.conf idmapd.conf make.conf mke2fs.conf ntp.conf redis.conf sandbox.conf whois.conf colord.conf e2fsck.conf fuse.conf gentwoo.conf ld.so.conf man.conf nscd.conf prelink.conf resolv.conf sysctl.conf karky7 ~ #
ちなみにReadonlyなsnapshopもとれる
karky7 ~ # btrfs subvolume snapshot -r /mnt/btrfs/dir1 /mnt/btrfs/dir1_readonly_snap Create a readonly snapshot of '/mnt/btrfs/dir1' in '/mnt/btrfs/dir1_readonly_snap' karky7 ~ # echo 'Kakikomeruka?' > /mnt/btrfs/dir1_readonly_snap/kakiko.txt -su: [f:id:cantimerny:20121105004411g:plain]/mnt/btrfs/dir1_readonly_snap/kakiko.txt: Read-only file system karky7 ~ #
削除したファイルを戻す場合はcpやrsyncで行うらしい、zfs rollback的なコマンドがあればいいなとも思ったがzfsと若干扱いが違うので良とする
karky7 ~ # rm /mnt/btrfs/dir1/* karky7 ~ # ls /mnt/btrfs/dir1/ karky7 ~ # ls /mnt/btrfs/dir1_readonly_snap/ GeoIP.conf dhcpcd.conf eix-sync.conf gai.conf host.conf ltrace.conf mdadm.conf nsswitch.conf rc.conf rsyncd.conf tmux.conf ca-certificates.conf dispatch-conf.conf etc-update.conf genkernel.conf idmapd.conf make.conf mke2fs.conf ntp.conf redis.conf sandbox.conf whois.conf colord.conf e2fsck.conf fuse.conf gentwoo.conf ld.so.conf man.conf nscd.conf prelink.conf resolv.conf sysctl.conf karky7 ~ # cp /mnt/btrfs/dir1_readonly_snap/* /mnt/btrfs/dir1/
サイズを確認する
karky7 ~ # btrfs file df /mnt/btrfs/ Data, RAID10: total=10.00GB, used=1.40MB Data: total=8.00MB, used=0.00 System, RAID10: total=16.00MB, used=4.00KB System: total=4.00MB, used=0.00 Metadata, RAID10: total=9.00GB, used=184.00KB Metadata: total=8.00MB, used=0.00 karky7 ~ # karky7 ~ # df -h Filesystem Size Used Avail Use% Mounted on rootfs 201G 133G 58G 70% / /dev/root 201G 133G 58G 70% / tmpfs 3.9G 288K 3.9G 1% /run rc-svcdir 1.0M 88K 936K 9% /lib64/rc/init.d cgroup_root 10M 0 10M 0% /sys/fs/cgroup udev 10M 0 10M 0% /dev shm 3.9G 136K 3.9G 1% /dev/shm /dev/sdb1 400G 3.2M 382G 1% /mnt/btrfs karky7 ~ #btrfs file df /mnt/btrfs/とdf -hの出力が違う、そもそもtotal=10.00GBとかどこの領域をさしているのか分からない、あとで調べる
リサイズしてみる
減らす事はないと思うが一様やってみる、広げられればいいと思うが、出来ればsubvolumeに大して容量を設定したいような気がする...zfs create -V 2G rpool/dir1みたいなkarky7 ~ # df -h Filesystem Size Used Avail Use% Mounted on ... karky7 ~ # btrfs filesystem resize -10G /mnt/btrfs Resize '/mnt/btrfs' of '-10G' karky7 ~ # df -h Filesystem Size Used Avail Use% Mounted on ... /dev/sdb1 390G 3.7M 342G 1% /mnt/btrfs karky7 ~ # btrfs filesystem resize max /mnt/btrfs Resize '/mnt/btrfs' of 'max' karky7 ~ # df -h Filesystem Size Used Avail Use% Mounted on ... /dev/sdb1 400G 3.7M 382G 1% /mnt/btrfs karky7 ~ #
デバイスを外してみる
これがいかない、実行手順が悪いのか分からないが後で調べるkarky7 ~ # btrfs fi show Label: 'bt1' uuid: 2dcc9b0a-f838-414b-aa38-069043e65709 Total devices 4 FS bytes used 1.83MB devid 4 size 100.00GB used 8.51GB path /dev/sdc2 devid 3 size 100.00GB used 8.51GB path /dev/sdc1 devid 2 size 100.00GB used 8.51GB path /dev/sdb2 devid 1 size 100.00GB used 8.53GB path /dev/sdb1 Btrfs Btrfs v0.19 karky7 ~ # karky7 ~ # btrfs device delete /dev/sdc1 /mnt/btrfs ERROR: error removing the device '/dev/sdc1' - Invalid argument
基本的な機能を試してみました、やはりCOWやsnapshotなど結構ありがたい機能が揃っています。Stableのリリースまでには結構重宝しそうな機能になるとおもいます。
今度はbtrfsをrootファイルシステムにしてGentooをインストールしたいという、野望が...出来なかった機能は後で調べます
0 件のコメント:
コメントを投稿