2 環境
CentOS版数は以下のとおりです。
[root@server ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 3.10.0-1160.el7.x86_64
3 コマンド一覧
xt4,xfsファイルシステムで使用するコマンドを以下に示します。
ファイルシステムに対する操作 | ext4 | xfs |
---|---|---|
ファイルシステムの作成 | mke2fs,mkfs -t ext4 | mkfs.xfs |
ファイルシステムのパラメータ表示 | dumpe2fs | xfs_info |
ファイルシステムのパラメータ変更 | tune2fs | xfs_admin |
ファイルシステムのラベル表示,変更 | e2label | xfs_admin |
ファイルシステムのエラーチェック,修復 | fsck.ext4,e2fsck | xfs_repair,fsck.xfs |
ファイルシステムのデバッグ | debugfs | xfs_db |
ファイルシステムへのアクセス禁止,解除 | fsfreeze | xfs_freeze,fsfreeze |
ファイルシステムのデフラグ | e4defrag | xfs_fsr |
ファイル断片化の確認 | filefrag | xfs_bmap |
4 ext4ファイルシステム
4.1 事前準備(デバイスの作成)
ループバックデバイスで使用するファイル(100M)を作成します。なお、ファイルの作り方は、ファイルの作り方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# fallocate -l 100M disk.img
作成したファイルを確認します。
[root@server ~]# ls -l disk.img -rw-r--r--. 1 root root 104857600 6月 7 19:25 disk.img
作成したファイルをループバックデバイスとして登録します。なお、losetupコマンドの使い方は、losetupコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# losetup -f /root/disk.img
登録したループバックデバイスを確認します。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 0 0 /root/disk.img
4.2 ファイルシステム作成(mke2fs)
ループバックデバイス(/dev/loop0)にext4ファイルシステムを作成します。
[root@server ~]# mke2fs -t ext4 /dev/loop0 mke2fs 1.42.9 (28-Dec-2013) Discarding device blocks: done Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 25688 inodes, 102400 blocks 5120 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=33685504 13 block groups 8192 blocks per group, 8192 fragments per group 1976 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done
ループバックデバイスに作成したファイルシステムを確認します。ext4ファイルシステムが作成されたことがわかります。
[root@server ~]# lsblk -fip /dev/loop0 NAME FSTYPE LABEL UUID MOUNTPOINT /dev/loop0 ext4 fb485f39-6486-41f6-801a-f1a00fff3f06
作成したループバックデバイスを/mntにマウントします。
[root@server ~]# mount -o loop /dev/loop0 /mnt
ファイルシステムを確認します。ループバックデバイスが/mntにマウントされていることがわかります。
[root@server ~]# df -hT -t ext4 ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/loop1 ext4 93M 1.6M 85M 2% /mnt
4.3 パラメータ表示/変更(dumpe2fs/tune2fs)
ファイルシステムのチェック回数を変更してみます。マウント回数が、チェック回数を超えると、次回ブート時にファイルシステムにfsckを行います。
ファイルシステム作成直後は、チェック回数が-1になっています。
[root@server ~]# dumpe2fs -h /dev/loop0 |grep "Maximum mount count" dumpe2fs 1.42.9 (28-Dec-2013) Maximum mount count: -1
チェック回数を5に設定してみます。
[root@server ~]# tune2fs -c 5 /dev/loop0 tune2fs 1.42.9 (28-Dec-2013) Setting maximal mount count to 5
チェック回数が5に設定されたことがわかります。
[root@server ~]# dumpe2fs -h /dev/loop0 |grep "Maximum mount count" dumpe2fs 1.42.9 (28-Dec-2013) Maximum mount count: 5
4.4 ラベルの表示/設定(e2label)
ファイルシステムのラベルを変更してみます。初期状態を確認します。ラベルが何も設定されていないことがわかります。
[root@server ~]# e2label /dev/loop0
ラベルを確認します。TESTという名前のラベルが設定されたことがわかります。
[root@server ~]# e2label /dev/loop0 TEST
ラベルを確認します。TESTという名前のラベルが設定されたことがわかります。
[root@server ~]# e2label /dev/loop0 TEST
他のコマンドでも、ラベルの確認ができます
dumpe2fsコマンドで確認してみます。
[root@server ~]# dumpe2fs -h /dev/loop0 |grep "Filesystem volume name" dumpe2fs 1.42.9 (28-Dec-2013) Filesystem volume name: TEST
lsblkコマンドで確認してみます。lsblkコマンドの使い方は、lsblkコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# lsblk -fip /dev/loop0 NAME FSTYPE LABEL UUID MOUNTPOINT /dev/loop0 ext4 TEST fb485f39-6486-41f6-801a-f1a00fff3f06
blkidコマンドで確認してみます。
[root@server ~]# blkid /dev/loop0 /dev/loop0: LABEL="TEST" UUID="fb485f39-6486-41f6-801a-f1a00fff3f06" TYPE="ext4"
4.5 エラーチェック(fsck.ext4)
[root@server ~]# fsck.ext4 /dev/loop0 e2fsck 1.42.9 (28-Dec-2013) TEST: recovering journal TEST: clean, 11/25688 files, 8896/102400 blocks (check in 4 mounts)
4.6 デバッグ(debugfs)
debugfsコマンドを実行します。
[root@server ~]# debugfs /dev/loop0 debugfs 1.42.9 (28-Dec-2013) debugfs:
コマンドプロンプトに対してhelpと入力すると、オプションが表示されます。
[root@server ~]# debugfs /dev/loop0 debugfs 1.42.9 (28-Dec-2013) debugfs: help Available debugfs requests: show_debugfs_params, params Show debugfs parameters open_filesys, open Open a filesystem close_filesys, close Close the filesystem -snip-
4.7 アクセス禁止/解除(fsfreeze)
/mntへのアクセス禁止/解除を試してみます。
[root@server ~]# df -hT -t ext4 ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/loop1 ext4 93M 1.6M 85M 2% /mnt
/mntへのアクセスを禁止にします。
[root@server ~]# fsfreeze -f /mnt
アクセス禁止にしたファイルシステムにファイルを作成します。アクセス禁止になっているため、touchコマンドが復帰しません。
[root@server ~]# touch /mnt/test.txt
もう1つターミナルを開きます。新しく開いたターミナルで/mntへのアクセス禁止を解除します。
[root@server ~]# fsfreeze -u /mnt
アクセス禁止を解除するとtouchコマンドが復帰します。
[root@server ~]# touch /mnt/test.txt [root@server ~]#
touchコマンドが復帰したら、作成したファイルを確認します。
[root@server ~]# ls /mnt/test.txt /mnt/test.txt
4.8 断片化の状況確認/デフラグ(e4defrag)
[root@server ~]# fallocate -l 80M /mnt/test.dat
[root@server ~]# e4defrag -c /mnt <Fragmented files> now/best size/ext 1. /mnt/test.dat 8/1 10240 KB Total/best extents 8/1 Average size per extent 10240 KB Fragmentation score 0 [0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag] This directory (/mnt) does not need defragmentation. Done.
デフラグを実行してみます。デフラグをするには、オプションなしでe4defragコマンドを実行します。
[root@server ~]# e4defrag /mnt ext4 defragmentation for directory(/mnt) Success: [ 0/4 ] Failure: [ 4/4 ]
4.9 ファイル断片化の確認(filefrag)
ファイルの各部分がファイルシステム内のどのブロックにマッピングされているかがわかります
[root@server ~]# filefrag -v /mnt/test.dat Filesystem type is: ef53 File size of /mnt/test.dat is 83886080 (81920 blocks of 1024 bytes) ext: logical_offset: physical_offset: length: expected: flags: 0: 0.. 14335: 10241.. 24576: 14336: unwritten 1: 14336.. 28671: 26625.. 40960: 14336: 24577: unwritten 2: 28672.. 34815: 43009.. 49152: 6144: 40961: unwritten 3: 34816.. 38911: 53249.. 57344: 4096: 49153: unwritten 4: 38912.. 53247: 59393.. 73728: 14336: 57345: unwritten 5: 53248.. 77823: 75777.. 100352: 24576: 73729: unwritten 6: 77824.. 79871: 6145.. 8192: 2048: 100353: unwritten 7: 79872.. 81919: 3511.. 5558: 2048: 8193: unwritten,eof /mnt/test.dat: 8 extents found
4.10 あと始末
テストに使用したファイルシステムのアンマウントします。
[root@server ~]# umount /mnt
削除するループバックデバイスを確認します。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 0 0 /root/disk.img
ループバックデバイスの削除をします。
[root@server ~]# losetup -d /dev/loop0
ループバックデバイスを確認します。作成したループバックデバイスが削除されたことがわかります。
[root@server ~]# losetup -l
作成したファイルを削除します。
[root@server ~]# rm disk.img rm: 通常ファイル `disk.img' を削除しますか? y
5 xfsファイルシステム
5.1 事前準備(デバイスの作成)
ループバックデバイスで使用するファイル(100M)を作成します。。
[root@server ~]# fallocate -l 100M disk.img
作成したファイルをループバックデバイスとして登録します。
[root@server ~]# losetup -f /root/disk.img
登録したループバックデバイスを確認します。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 0 0 /root/disk.img
5.2 ファイルシステム作成(mkfs.xfs)
ループバックデバイス(/dev/loop0)にxfsファイルシステムを作成します。
[root@server ~]# mkfs.xfs /dev/loop0 Discarding blocks...Done. 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
ループバックデバイスに作成したファイルシステムを確認します。xfsファイルシステムが作成されたことがわかります。
[root@server ~]# lsblk -fip /dev/loop0 NAME FSTYPE LABEL UUID MOUNTPOINT /dev/loop0 xfs 6326cb24-3ff0-4f48-bcdd-ba45faca27ae
作成したループバックデバイスを/mntにマウントします。
[root@server ~]# mount -o loop /dev/loop0 /mnt
ファイルシステムを確認します。ループバックデバイスが/mntにマウントされていることがわかります。
[root@server ~]# df -hT -t xfs ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/vda3 xfs 4.8G 2.8G 2.0G 60% / /dev/vda1 xfs 125M 116M 8.8M 94% /boot /dev/loop1 xfs 97M 5.3M 92M 6% /mnt
5.3 パラメータの表示(xfs_info)
[root@server ~]# xfs_info /mnt/ meta-data=/dev/loop1 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
5.4 パラメータの変更(xfs_admin)
ファイルシステムのラベルを変更してみます。初期状態を確認します。ラベルが何も設定されていないことがわかります。
[root@server ~]# xfs_admin -l /dev/loop0 label = ""
TESTという名前のラベルを設定します。
[root@server ~]# xfs_admin -L TEST /dev/loop0 writing all SBs new label = "TEST"
ラベルを確認します。TESTという名前のラベルが設定されたことがわかります。
[root@server ~]# xfs_admin -L TEST /dev/loop0 writing all SBs new label = "TEST"
5.5 エラーチェック(xfs_repair)
ファイルシステムが壊れていないかどうかをチェックします。
壊れていた場合、ファイルシステムの修復を行います。
ファイルシステムをアンマウントした状態で実行します。
[root@server ~]# umount /mnt
[root@server ~]# 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 = 2 - agno = 3 - agno = 1 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
5.6 デバッグ(debugfs)
[root@server ~]# xfs_db /dev/loop0 xfs_db>
コマンドプロンプトに対してhelpと入力すると、オプションが表示されます。
[root@server ~]# xfs_db /dev/loop0 xfs_db> help ablock filoff -- set address to file offset (attr fork) addr [field-expression] -- set current address agf [agno] -- set address to agf header -snip-
5.7 ファイルシステムのデフラグ(xfs_fsr)
[root@server ~]# df -hT -t xfs /mnt ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/loop1 xfs 97M 5.3M 92M 6% /mnt
[root@server ~]# fallocate -l 80M /mnt/test.dat
[root@server ~]# xfs_fsr -v /mnt /mnt start inode=0 ino=67 insufficient freespace for: ino=67: size=83886080: ignoring
5.8 ファイル断片化の確認(xfs_bmap)
テスト用ファイルを作成するファイルシステムを確認します。
/mntにテスト用ファイル(80M)を作成します。
[root@server ~]# fallocate -l 80M /mnt/test.dat
ファイルの断片化を確認します。ファイルの各部分がファイルシステム内のどのブロックにマッピングされているかがわかります。ファイルが4つのエクステントに分割されていることがわかります。
[root@server ~]# xfs_bmap -v /mnt/test.dat /mnt/test.dat: EXT: FILE-OFFSET BLOCK-RANGE AG AG-OFFSET TOTAL 0: [0..51063]: 128..51191 0 (128..51191) 51064 1: [51064..102191]: 51264..102391 1 (64..51191) 51128 2: [102192..146479]: 109304..153591 2 (6904..51191) 44288 3: [146480..163839]: 153664..171023 3 (64..17423) 17360
フラグメントの状況は、xfs_dbコマンドを使っても確認できます。
[root@server ~]# xfs_db -r /dev/loop0 xfs_db> frag actual 4, ideal 1, fragmentation factor 75.00% Note, this number is largely meaningless. Files on this filesystem average 4.00 extents per file xfs_db>
5.9 あと始末
テストに使用したファイルシステムのアンマウントします。
[root@server ~]# umount /mnt
削除するループバックデバイスを確認します。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE /dev/loop0 0 0 0 0 /root/disk.img
ループバックデバイスの削除をします。
[root@server ~]# losetup -d /dev/loop0
ループバックデバイスを確認します。作成したループバックデバイスが削除されたことがわかります。
[root@server ~]# losetup -l [root@server ~]#
作成したファイルを削除します。
[root@server ~]# rm disk.img rm: 通常ファイル `disk.img' を削除しますか? y
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ