LPIC201/202 あずき本 ch4 デバイスとファイルシステム (3/3)

LPIC201勉強メモ資格勉強

出典: 

4.3 ファイルシステムの保守

4.3.1 ext2/ext3ファイルシステムの構造

ブロックの種類

  • ブロックグループにはデータブロック、iノードブロック、スーパーブロックがある
  • 3種のブロックがブロックグループにまとめられる

データブロック

  • 1024,2048,4096Bから選択
  • 1Bのファイルを保存するにも1ブロック消費するので注意する

iノードブロック

  • 128バイトのiノードを詰め込む

    • ブロックが1024バイトならば8つ
  • ext2/ext3/ext4ではファイルシステム作成後に追加することはできないので枯渇に注意する

スーパーブロック

メタ情報

  • データブロックサイズ
  • ブロックグループごとにバックアップされる
dd if=/dev/zero of=~/fs/loop0 bs=1M count=100
sudo losetup /dev/loop0 ~/fs/loop0

sudo mke2fs -b 4096 -c -j -n /dev/loop0

-n: dry-run

mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
25600 inodes, 25600 blocks
1280 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=29360128
1 block group
32768 blocks per group, 32768 fragments per group
25600 inodes per group

実際に作ったものに対してはdumpe2fs

sudo mke2fs -b 4096 -c -j /dev/loop0

sudo dumpe2fs /dev/loop0
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          08fd9580-e2ec-4120-8df9-1e34ec703df7
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              25600
Block count:              25600
Reserved block count:     1280
Free blocks:              23759
Free inodes:              25589
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      6
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         25600
Inode blocks per group:   800
Filesystem created:       Sun Dec 13 10:26:46 2020
Last mount time:          n/a
Last write time:          Sun Dec 13 10:26:46 2020
Mount count:              0
Maximum mount count:      -1
Last checked:             Sun Dec 13 10:26:46 2020
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:	          128
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      8888cf44-6e52-4847-9954-f030c4867a11
Journal backup:           inode blocks
Journal features:         (none)
Journal size:             4100k
Journal length:           1024
Journal sequence:         0x00000001
Journal start:            0


Group 0: (Blocks 0-25599)
  Primary superblock at 0, Group descriptors at 1-1
  Reserved GDT blocks at 2-7
  Block bitmap at 8 (+8), Inode bitmap at 9 (+9)
  Inode table at 10-809 (+10)
  23759 free blocks, 25589 free inodes, 2 directories
  Free blocks: 1841-25599
  Free inodes: 12-25600
Inode count:              25600
Block count:              25600
Reserved block count:     1280
Free blocks:              23759
Free inodes:              25589
First block:              0
Block size:               4096

tune2fs -lでも同じものを出力できる

スーパーブロックはbackupすることになってるのに見当たらない…

Column ext4ファイルシステムの構造

http://kernelnewbies.org/Ext4

特徴

  • ext3互換
  • 容量上限

    • ext3は2TBファイルサイズ、16TBファイルシステム
    • ext4は16TBファイルサイズ、1EBファイルシステム
  • サブディレクトリ数上限撤廃

    • ext3には32000個上限があった
  • エクステント

    • 多段間接参照によるパフォーマンス劣化解消
  • マルチブロック割り当て

    • 一度に複数のブロックを割り当てられる
  • fsck高速化
  • ジャーナルチェックサム
  • オンラインデフラグ
  • iノード関連

    • ナノ秒単位のタイムスタンプ

4.3.2 ファイルシステムのチェック

/etc/fstabで第6フィールドが0でないものはシステム起動時にもチェックされる

取得で実行するにはfsck, e2fsckコマンドを使用する

fsck

  • -r

    • 対話的に修復実行
  • -t タイプ

    • ファイルシステムの種類
  • -A

    • /etc/fstab記述の全ファイルシステムに対して実行する
  • -N

    • dry-run
sudo fsck -r /dev/loop0
fsck from util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
/dev/loop0: clean, 11/25600 files, 1841/25600 blocks
/dev/loop0: status 0, rss 1340, real 0.018470, user 0.001352, sys 0.001274

mkfsよろしくfsck.ext3とかもある

e2fsck

mke2fsfsck版みたいなヤツ

sudo e2fsck -f /dev/loop0
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/loop0: 11/25600 files (0.0% non-contiguous), 1841/25600 blocks

マウントしているものはチェックできない

sudo e2fsck -f /dev/sda1
e2fsck 1.42.9 (28-Dec-2013)
/dev/sda1 is mounted.
e2fsck: Cannot continue, aborting.

ルートファイルシステム等はshutdown -Fで次回起動時にfsckを予約する

  • manにもhelpにも書かれてない…

xfs_repair

sudo mkfs.xfs -f /dev/loop0
meta-data=/dev/loop0             isize=512    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
fsck.xfs
If you wish to check the consistency of an XFS filesystem or
repair a damaged filesystem, see xfs_repair(8).
sudo xfs_repair /dev/loop0
Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
        - found root inode chunk
Phase 3 - for each AG...
        - scan and clear agi unlinked lists...
        - process known inodes and perform inode discovery...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - process newly discovered inodes...
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
Phase 5 - rebuild AG headers and trees...
        - reset superblock...
Phase 6 - check inode connectivity...
        - resetting contents of realtime bitmap and summary inodes
        - traversing filesystem ...
        - traversal finished ...
        - moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done

-nでdry-run

4.3.3 ext2/ext3/ext4ファイルシステムの管理

ext3に戻しておく

sudo mke2fs -b 4096 -c -j /dev/loop0

tune2fs

-l: スーパーブロックの内容を表示

  • dumpe2fsと同じ
sudo tune2fs -l /dev/loop0
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          959b51cd-ff20-47b4-a39d-99a68b4da018
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
...
  • -j: ジャーナリング追加(ext2 -> ext3)
  • -m: 管理領域のパーセンテージ設定
  • -L ラベル: ボリュームラベル設定
  • -U UUID: 指定したUUIDに変更する
sudo tune2fs -l /dev/loop0 | grep -e 'Filesystem volume name'
- Filesystem volume name:   <none>
+ Filesystem volume name:   loop0

-c カウント: ファイルシステムチェックが行われるまでの最大マウント数設定

sudo tune2fs -c 10 /dev/loop0
tune2fs 1.42.9 (28-Dec-2013)
Setting maximal mount count to 10
sudo tune2fs -l /dev/loop0 | grep -e 'Maximum mount count'
- Maximum mount count:      -1
+ Maximum mount count:      10

-C カウント: 現在のカウント数設定

sudo tune2fs -C 20 /dev/loop0
tune2fs 1.42.9 (28-Dec-2013)
Setting current mount count to 20
sudo tune2fs -l /dev/loop0 | grep -e 'Mount count'
- Mount count:              0
+ Mount count:              20

badblocks

デバイス上の不良ブロック検索

sudo badblocks /dev/loop0
(空)

debugfs

sudo debugfs /dev/loop0
debugfs 1.42.9 (28-Dec-2013)
debugfs:  ls
 2  (12) .    2  (12) ..    11  (4072) lost+found   
debugfs:  stat lost+found
Inode: 11   Type: directory    Mode:  0700   Flags: 0x0
Generation: 0    Version: 0x00000000
User:     0   Group:     0   Size: 16384
File ACL: 0    Directory ACL: 0
Links: 2   Blockcount: 32
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x5fd5faf9 -- Sun Dec 13 11:28:57 2020
atime: 0x5fd5faf9 -- Sun Dec 13 11:28:57 2020
mtime: 0x5fd5faf9 -- Sun Dec 13 11:28:57 2020
BLOCKS:
(0-3):811-814
TOTAL: 4

debugfs:  quit

いろいろできる

4.3.4 S.M.A.R.T.

S.M.A.R.T.: Self-Monitoring Analysis and Reporting Technology system

ハードディスクに組み込まれている自己診断機能

  • 故障の余地
  • 故障の兆候を発見
smartctl --version
-bash: smartctl: command not found

無いので入れる

yum provides smartctl
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: d2lzkl7pfhq30w.cloudfront.net
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
1:smartmontools-7.0-2.el7.x86_64 : Tools for monitoring SMART capable hard disks
Repo        : base
Matched from:
Filename    : /usr/sbin/smartctl
sudo yum install -y smartmontools

smartctl --version
smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1127.19.1.el7.x86_64] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org

-a: S.M.A.R.T.情報を表示

sudo smartctl -a /dev/sda
smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1127.19.1.el7.x86_64] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor:               Google
Product:              PersistentDisk
Revision:             1
Compliance:           SPC-4
User Capacity:        21,474,836,480 bytes [21.4 GB]
Logical block size:   512 bytes
Physical block size:  4096 bytes
LB provisioning type: not reported [LBPME=1, LBPRZ=1]
Rotation Rate:        1025 rpm
Serial number:        
Device type:          disk
Local Time is:        Sun Dec 13 12:06:42 2020 UTC
SMART support is:     Unavailable - device lacks SMART capability.

=== START OF READ SMART DATA SECTION ===
Current Drive Temperature:     0 C
Drive Trip Temperature:        0 C

Error Counter logging not supported

Device does not support Self Test logging

-t TEST, --test=TEST: セルフテスト実施

sudo smartctl -t short /dev/sda
smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1127.19.1.el7.x86_64] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org

Short offline self test failed [unsupported scsi opcode]

-l TYPE, --log=TYPE: ログタイプ指定

sudo smartctl -l error /dev/sda
smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1127.19.1.el7.x86_64] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
Error Counter logging not supported

-H, --health: 状態を表示

sudo smartctl -H /dev/sda
smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1127.19.1.el7.x86_64] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Health Status: OK

4.3.5 XFSファイルステムの管理

XFSにしとく

sudo mkfs.xfs -f /dev/loop0

xfs_admin

xfs_admin: XFSのパラメータ確認・変更

  • -l: ラベル確認
  • -u: UUID確認
sudo xfs_admin -lu /dev/loop0
label = ""
UUID = fbea0b59-0654-48a0-ab4b-22c58077525c
  • -L label: ラベル設定
  • -U uuid: UUID設定
sudo xfs_admin -L sample_xfs -U $(uuidgen) /dev/loop0
sudo xfs_admin -L sample_xfs -U $(uuidgen) /dev/loop0
writing all SBs
new label = "sample_xfs"
Clearing log and setting UUID
writing all SBs
new UUID = 076d527f-ef96-42e7-81bd-303bdb83e72d
sudo xfs_admin -lu /dev/loop0
- label = ""
+ label = "sample_xfs"
- UUID = fbea0b59-0654-48a0-ab4b-22c58077525c
+ UUID = 076d527f-ef96-42e7-81bd-303bdb83e72d

xfs_info

マウントされているXFSファイルシステムの情報を表示

sudo mkdir /mnt/loop0
sudo mount /dev/loop0 /mnt/loop0

sudo xfs_info /dev/loop0
meta-data=/dev/loop0             isize=512    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

xfsdump

XFSを完全バックアップする

xfsdump
-bash: xfsdump: command not found

ないので入れる

yum provides xfsdump
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: d2lzkl7pfhq30w.cloudfront.net
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
xfsdump-3.1.7-1.el7.x86_64 : Administrative utilities for the XFS filesystem
Repo        : base
sudo yum install -y xfsdump
  • -l level: ダンプレベル
  • -f 出力先: 出力先指定

/dev/loop0 (XFS)を/dev/loop1にバックアップする

sudo xfsdump -l 0 -f /dev/loop1 /dev/loop0
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control

 ============================= dump label dialog ==============================

please enter label for this dump session (timeout in 300 sec)
 -> sample_xfs_dump
session label entered: "sample_xfs_dump"

 --------------------------------- end dialog ---------------------------------

xfsdump: level 0 dump of lpic2-study-1:/mnt/loop0
xfsdump: dump date: Sun Dec 13 12:42:10 2020
xfsdump: session id: b6e6052a-035c-464d-a92f-36772ff006f5
xfsdump: session label: "sample_xfs_dump"
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: 20800 bytes

 ============================= media label dialog =============================

please enter label for media in drive 0 (timeout in 300 sec)
 -> 0
media label entered: "0"

 --------------------------------- 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 21016 bytes
xfsdump: dump size (non-dir files) : 0 bytes
xfsdump: dump complete: 8 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /dev/loop1 OK (success)
xfsdump: Dump Status: SUCCESS

xfsrestore

xfsファイルシステムをリストア

xfsdumpと一緒に入ってくる

yum provides xfsrestore
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: d2lzkl7pfhq30w.cloudfront.net
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
xfsdump-3.1.7-1.el7.x86_64 : Administrative utilities for the XFS filesystem
Repo        : base
Matched from:
Filename    : /usr/sbin/xfsrestore



xfsdump-3.1.7-1.el7.x86_64 : Administrative utilities for the XFS filesystem
Repo        : @base
Matched from:
Filename    : /usr/sbin/xfsrestore

-f file: リストア元デバイスファイル

リストア先ディレクトリを掘っておいて指定する

mkdir ~/files_restored/
sudo xfsrestore -f /dev/loop1 ~/files_restored/
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: lpic2-study-1
xfsrestore: mount point: /mnt/loop0
xfsrestore: volume: /dev/loop0
xfsrestore: session time: Sun Dec 13 12:42:10 2020
xfsrestore: level: 0
xfsrestore: session label: "sample_xfs_dump"
xfsrestore: media label: "0"
xfsrestore: file system id: 076d527f-ef96-42e7-81bd-303bdb83e72d
xfsrestore: session id: b6e6052a-035c-464d-a92f-36772ff006f5
xfsrestore: media id: f7b85b17-4746-4413-bd3c-058d181a6265
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 0 entries processed
xfsrestore: directory post-processing
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /dev/loop1 OK (success)
xfsrestore: Restore Status: SUCCESS

セッションIDまたはセッションラベルが必要

...
xfsrestore: session label: "sample_xfs_dump"
...
xfsrestore: session id: b6e6052a-035c-464d-a92f-36772ff006f5
...
  • -L session_label: セッションラベル指定
  • -S session_id: セッションID指定

xfs_repair

ファイルシステム修復

アンマウントしておく必要がある

sudo umount /dev/loop0

sudo xfs_repair /dev/loop0
Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
        - found root inode chunk
Phase 3 - for each AG...
        - scan and clear agi unlinked lists...
        - process known inodes and perform inode discovery...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - process newly discovered inodes...
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
Phase 5 - rebuild AG headers and trees...
        - reset superblock...
Phase 6 - check inode connectivity...
        - resetting contents of realtime bitmap and summary inodes
        - traversing filesystem ...
        - traversal finished ...
        - moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done

4.3.6 Btrfsファイルシステムの管理

Btrfsにしておく

sudo mkfs.btrfs -f /dev/loop0
btrfs-progs v4.9.1
See http://btrfs.wiki.kernel.org for more information.

Performing full device TRIM /dev/loop0 (100.00MiB) ...
Label:              (null)
UUID:               ed356200-43db-469b-b982-9a5f0ed73ca5
Node size:          16384
Sector size:        4096
Filesystem size:    100.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   100.00MiB  /dev/loop0

btrfsコマンド

いろいろなサブコマンドを実行できる

btrfs
usage: btrfs [--help] [--version] <group> [<group>...] <command> [<args>]

Command groups:
  subvolume         manage subvolumes: create, delete, list, etc
  filesystem        overall filesystem tasks and information
  balance           balance data across devices, or change block groups using filters
  device            manage and query devices in the filesystem
  scrub             verify checksums of data and metadata
  rescue            toolbox for specific rescue operations
  inspect-internal  query various internal information
  property          modify properties of filesystem objects
  quota             manage filesystem quota settings
  qgroup            manage quota groups
  replace           replace a device in the filesystem

filesystemサブコマンド

btrfs filesystem show

sudo btrfs filesystem show
Label: none  uuid: ed356200-43db-469b-b982-9a5f0ed73ca5
	Total devices 1 FS bytes used 112.00KiB
	devid    1 size 100.00MiB used 88.00MiB path /dev/loop0

ストレージプール構成

  • パラメータ無しだと RAID0 で構築される
  • bs=1M count=100 のままだと足りないので増やす
sudo umount /mnt/loop0

sudo losetup -D /dev/loop0
sudo losetup -D /dev/loop1

dd if=/dev/zero of=~/fs/loop0 bs=1M count=1024
dd if=/dev/zero of=~/fs/loop1 bs=1M count=1024

sudo losetup /dev/loop0 ~/fs/loop0
sudo losetup /dev/loop1 ~/fs/loop1

sudo mkfs.btrfs /dev/loop0 /dev/loop1
btrfs-progs v4.9.1
See http://btrfs.wiki.kernel.org for more information.

Performing full device TRIM /dev/loop0 (1.00GiB) ...
Performing full device TRIM /dev/loop1 (1.00GiB) ...
Label:              (null)
UUID:               92efbac2-2698-477e-bb25-43fc07d17465
Node size:          16384
Sector size:        4096
Filesystem size:    2.00GiB
Block group profiles:
  Data:             RAID0           204.75MiB
  Metadata:         RAID1           102.38MiB
  System:           RAID1             8.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  2
Devices:
   ID        SIZE  PATH
    1     1.00GiB  /dev/loop0
    2     1.00GiB  /dev/loop1

uuid 92efbac2-2698-477e-bb25-43fc07d17465が与えられる

sudo btrfs filesystem show
Label: none  uuid: 92efbac2-2698-477e-bb25-43fc07d17465
	Total devices 2 FS bytes used 112.00KiB
	devid    1 size 1.00GiB used 212.75MiB path /dev/loop0
	devid    2 size 1.00GiB used 212.75MiB path /dev/loop1

UUIDを用いてストレージプールをマウントしてみる

sudo mkdir /mnt/raid/

sudo mount UUID=92efbac2-2698-477e-bb25-43fc07d17465 /mnt/raid

sudo lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   20G  0 disk 
|-sda1   8:1    0  200M  0 part /boot/efi
`-sda2   8:2    0 19.8G  0 part /
loop0    7:0    0    1G  0 loop /mnt/raid
loop1    7:1    0    1G  0 loop 

btrfs filesystem label でラベルを付けてみる

  • マウント中のものはデバイスファイル指定ではラベル付けできない
sudo btrfs filesystem label /dev/loop0 raid_sample
ERROR: device /dev/loop0 is mounted, use mount point

デバイスファイル指定してラベルを設定する場合はアンマウント必要

sudo umount LABEL=raid_sample

sudo btrfs filesystem label /dev/loop0 raid_sample_modified

sudo btrfs filesystem label /dev/loop0
raid_sample_modified

subvolumeサブコマンド

マウントしている(サブ)ボリュームの下に任意のサブボリュームをディレクトリ感覚で掘れる

sudo mount -L raid_sample_modified /mnt/raid

sudo btrfs subvolume create /mnt/raid/sub1
sudo btrfs subvolume create /mnt/raid/sub2
Create subvolume '/mnt/raid/sub1'
Create subvolume '/mnt/raid/sub2'

サブボリュームはbtrfs filesystem showでは出てこない

sudo btrfs filesystem show
Label: 'raid_sample_modified'  uuid: 92efbac2-2698-477e-bb25-43fc07d17465
	Total devices 2 FS bytes used 288.00KiB
	devid    1 size 1.00GiB used 212.75MiB path /dev/loop0
	devid    2 size 1.00GiB used 212.75MiB path /dev/loop1

btrfs subvolume listを使う

sudo btrfs subvolume list /mnt/raid/
ID 258 gen 10 top level 5 path sub1
ID 259 gen 11 top level 5 path sub2

個々のサブボリュームをマウントするにはこのIDを用いる

  • マウントオプション -t btrfssobvolid=ID
sudo umount /mnt/raid

sudo mkdir -p /mnt/raid/sub1/
sudo mount -t btrfs -o subvolid=258 LABEL=raid_sample_modified /mnt/raid/sub1/

tree /mnt/raid/
/mnt/raid/
`-- sub1

1 directory, 0 files

btrfs subvolume snapshot: スナップショットもサブボリュームごとに行う

  • btrfs subvolume snapshot <source-btrfs> <dest-btrfs>
sudo mkdir -p /mnt/raid/sub2/
sudo mount -t btrfs -o subvolid=259 LABEL=raid_sample_modified /mnt/raid/sub2/

sudo btrfs subvolume snapshot /mnt/raid/sub1 /mnt/raid/sub2
Create a snapshot of '/mnt/raid/sub1' in '/mnt/raid/sub2/sub1'

btrfs-convert

既存の別の種類のファイルシステムをbtrfsに変換

ext2をbtrfsに変換してみる

dd if=/dev/zero of=~/fs/loop2 bs=1M count=100
sudo losetup /dev/loop2 ~/fs/loop2
sudo mke2fs /dev/loop2

sudo btrfs-convert /dev/loop2

ブロックサイズ足りねえぞって言われる

ERROR: block size is too small: 1024 < 4096
WARNING: an error occurred during conversion, filesystem is partially created but not finalized and not mountable

ブロックサイズ4096でext2を作り直して再試行

sudo mke2fs -b 4096 /dev/loop2

sudo btrfs-convert /dev/loop2
create btrfs filesystem:
	blocksize: 4096
	nodesize:  16384
	features:  extref, skinny-metadata (default)
creating ext2 image file
creating btrfs metadatacopy inodes [o] [         0/        11]

column: ZFS

もともとSolaris用

grep -e 'zfs' /proc/filesystems
(空)
modprobe zfs
modprobe: FATAL: Module zfs not found.

サポートされてない

ZFS on Linuxというカーネルモジュールで利用可能らしい

4.3.7 オートマウント

  • CD-ROM, NFSディレクトリ等は必要なときだけマウントする
  • 手動マウント/アンマウントは不便
  • autofsによるオートマウントが便利
sudo systemctl status autofs
Unit autofs.service could not be found.

ない

yum provides autofs
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp-srv2.kddilabs.jp
 * epel: d2lzkl7pfhq30w.cloudfront.net
 * extras: ftp-srv2.kddilabs.jp
 * updates: ftp-srv2.kddilabs.jp
1:autofs-5.0.7-113.el7.x86_64 : A tool for automatically mounting and unmounting filesystems
Repo        : base
sudo yum install -y autofs

カーネル起動時の自動起動を有効にしておく

sudo systemctl is-enabled autofs
disabled
sudo systemctl enable autofs
Created symlink from /etc/systemd/system/multi-user.target.wants/autofs.service to /usr/lib/systemd/system/autofs.service.

/etc/auto.master

cat /etc/auto.master
#
# Sample auto.master file
# This is a 'master' automounter map and it has the following format:
# mount-point [map-type[,format]:]map [options]
# For details of the format look at auto.master(5).
#
/misc	/etc/auto.misc
#
# NOTE: mounts done from a hosts map will be mounted with the
#	"nosuid" and "nodev" options unless the "suid" and "dev"
#	options are explicitly given.
#
/net	-hosts
#
# Include /etc/auto.master.d/*.autofs
# The included files must conform to the format of this file.
#
+dir:/etc/auto.master.d
#
# Include central master map if it can be found using
# nsswitch sources.
#
# Note that if there are entries for /net or /misc (as
# above) in the included master map any keys that are the
# same will not be seen as the first read key seen takes
# precedence.
#
+auto.master

/etc/auto.master, /etc/auto.master.d/

書式

/misc	/etc/auto.misc
...
/net	-hosts
  • /misc

    • マウントベース
    • この下にマウントポイントが生成される
  • /etc/auto.misc

    • マウントベースごとのマップファイルの場所

ほか、--timeout=60などのオプションを設定できる

マップファイル

/miscのマップファイル

cat /etc/auto.misc
#
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# Details may be found in the autofs(5) manpage

cd		-fstype=iso9660,ro,nosuid,nodev	:/dev/cdrom

# the following entries are samples to pique your imagination
#linux		-ro,soft,intr		ftp.example.org:/pub/linux
#boot		-fstype=ext2		:/dev/hda1
#floppy		-fstype=auto		:/dev/fd0
#floppy		-fstype=ext2		:/dev/fd0
#e2floppy	-fstype=ext2		:/dev/fd0
#jaz		-fstype=ext2		:/dev/sdc1
#removable	-fstype=ext2		:/dev/hdd

書式

cd		-fstype=iso9660,ro,nosuid,nodev	:/dev/cdrom
  • cd

    • /misc/cdが生える
  • -fstype=iso9660,ro,nosuid,nodev

    • マウントオプション
    • /etc/fstabのものとおなじ
  • :/dev/cdrom

    • デバイスファイル

オートマウントの例

  • 上記の設定の場合、/mnt/misc/cd/が必要になった時点で/dev/cdromがマウントされる
  • デフォルトで5分間アクセスがないと自動的にアンマウントされる

    • auto.masterファイルで--timeoutオプションが指定された場合、その秒数でアンマウント
    • /mnt/misc/cd/ ディレクトリも削除される