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ファイルシステムの構造
特徴
- 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
mke2fs
のfsck
版みたいなヤツ
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 btrfs
とsobvolid=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/
ディレクトリも削除される