Skip to content

Instantly share code, notes, and snippets.

@akahana-1
Last active November 21, 2016 22:40
Show Gist options
  • Save akahana-1/983b04ed1aa7db89f618fa9eac4142dc to your computer and use it in GitHub Desktop.
Save akahana-1/983b04ed1aa7db89f618fa9eac4142dc to your computer and use it in GitHub Desktop.
btrfsに関するメモを少し.しばしば間違いが見られる

RAIDアレイでbtrfsを始める

入手して動作するようになったML100 G7には,手に入れたときから3つのHDDが刺さっていた

  • 250GB HDD
  • 2TB HDD * 2

2TB HDD * 2をRAID1で束ねたRAIDアレイをbtrfsのフォーマットして使ってみる.

動作環境は次の通り

  • OS : debian 8.x (Jessie)
  • CPU : Celeron G530 (2.4 GHz)
  • mem : 2G

btrfsの詳しいことについては次のサイトが参考になる.

btrfsのフォーマット

btrfsはパーティション単位でなくてボリューム単位でフォーマットすることができる. フォーマットの仕方はパーティション単位で行うときと変わらず,ボリューム名が*/dev/volume*ならば

# mkfs.btrfs */dev/volume*

これでbtrfsとしてボリュームをフォーマットできる.

もし, mkfs.btrfsが入っていないときは次のコマンドでbtrfs-toolsをインストールすることで使えるようになる.

# apt-get install btrfs-tools

今回は/dev/md0に構築したRAIDアレイをbtrfsでフォーマットするため,前述のコマンドの*/dev/volume*を/dev/md0に置き換えるだけである. このようにしてbtrfsでフォーマットしたボリュームはマウントすることもできる. これ以降はbtrfsでフォーマットしたボリュームを/mntにマウントして取り扱う

btrfsによるRAID構築

ちなみに,btrfsはRAIDアレイを自身で構築することもできる. ボリューム単位でのフォーマット時に複数ボリュームを指定してすることでRAIDになる.

/dev/sda /dev/sdbをまとめてRAIDにした上でbtrfsでフォーマットするには

# mkfs.btrfs /dev/sda /dev/sdb

で実現できる 複数のボリュームを指定してbtrfsのボリュームを作成した際は,対象となったいずれのボリュームでもマウントが行える.

より詳しいことはUsing Btrfs with Multiple Devices - btrfs Wikiに書いてある.

subvolume の作成

btrfsではフォーマットされたボリュームを内部でsubvolumeに分割することができる. 一般に物理ボリュームに対してパーティションを切って各パーティションごとにファイルシステムでフォーマットするかのように,btrfsではsubvolumeという仕組みでボリューム内部を分割する.

subvolumeはbtrfsの中核をなす仕組みであり,snapshotと呼ばれるバックアップ機能はsubvolumeごとに行えるなどの利点がある. また, /etc/fstabで指定することでsubvolume単位でマウントすることもできる.

既存のbtrfsボリュームに名前nameのsubvolumeを作成するには以下のコマンドを用いる

# btrfs subvolume create /mnt/*name*

これで/mnt/nameに新しいsubvolumeが作成される. subvolumeを作成する時に指定するパスはbtrfsでフォーマットしたボリュームがマウントされているパスになる. この例ではbtrfsでフォーマットしたボリュームを/mntにマウントしているため,/mnt下のパスを指定することになる.

btrfsボリュームに作成されているsubvolumeの一覧は次のコマンドで取得できる.

# btrfs subvolume list /mnt

今回は録画データの保存用に使いたかったので,録画データを保存するためのsubvolumeとしてnasを作成した.

subvolume のマウント

btrfsで作成したsubvolumeはsubvolume単位でそれぞれ異なるマウントポイントへマウントすることができる.

例えば, btrfs subvolume list /mntの出力が次のようになっているとする.

# btrfs subvolume list /mnt
ID 257 gen 45 top level 5 path svol1
ID 258 gen 39 top level 5 path svol2

この時svol1をマウントする方法は二つある. 一つはマウントオプションにsubvol=nameを用いて,subvolumeの名前でマウントする方法である.

svol1をマウントするには

# mount -t btrfs -o subvol=svol1 /dev/md0 /mnt/tmp

で/mnt/tmp下にsvol1がマウントされる.

もう一つはマウントオプションsubvolid=objectidを用いて,subvolumeのIDでマウントする方法である. btrfs subvolume list /mntを見ればsvol1のIDは257になっている. つまりsvol1をマウントするには

# mount -t btrfs -o subvolid=257 /dev/md0 /mnt/tmp

で/mnt/tmp下にsvol1がマウントされる

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment