Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

XFSのbigtimeを少し試してみた(RHEL9 & ML8.4)

XFSのbigtimeを少し試してみた(RHEL9 & ML8.4)

"MIRACLE LINUXでやってみた、触ってみた !!LT大会!! - connpass" https://miraclelinux.connpass.com/event/257200/
source:: https://gitlab.com/matoken/miracle-2022.08/-/blob/main/slide/slide.adoc

Kenichiro MATOHARA

August 26, 2022
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. 「MIRACLE LINUX Users Meetup 「MIRACLE LINUX Users Meetup #4」に参加 #4」に参加

    RHEL(Red Hat Enterprise Linux)9の8からの変更点で「XFSが 新機能(bigtime, inobtcount)に対 応、作成時もデフォルトに」というものが 気になったので少し試してみた. RHEL 9が出たけど、MIRACLE LINUX 9はどうなるの! YouTube 4 / 24
  2. XFSの XFSの bigtime bigtime , , inobtcount inobtcount XFSの bigtime

    , inobtcount は5.10からの機能 bigtime いわゆるY2038問題への対策で1901年12月~2486年7月の タイムスタンプに対応できるようになる inobtcount inode btreeサイズを保存するようになり,マウント時間の短縮が される 今回は bigtime を少し試してみた 6 / 24
  3. MiracleLinux 8.4 で XFS 作成 MiracleLinux 8.4 で XFS 作成

    1 XFS既定値でフォーマット 2 bigtime は無い $ dd if=/dev/zero of=./disk.img bs=1M count=64 $ mkfs.xfs ./disk.img $ xfs_info ./disk.img | grep bigtime $ sudo mount ./disk.img /mnt $ sudo chown `id -u`:`id -g` /mnt 1 2 8 / 24
  4. 1 2038年12月31日のファイルを作成しようとする 2 2028年01月19日になった $ touch -d '20381231' /mnt/2038 $

    ls -lA /mnt 合計 0 -rw-rw-r--. 1 matoken matoken 0 Jan 19 2038 2038 $ stat --format %y /mnt/2038 2038-01-19 12:14:07.000000000 +0900 1 2 9 / 24
  5. RHEL 9 で XFS 作成(bigtime=1) RHEL 9 で XFS 作成(bigtime=1)

    1 XFS既定値でフォーマット 2 bigtime=1 になっている $ dd if=/dev/zero of=./disk.img bs=1M count=64 $ mkfs.xfs ./disk.img $ xfs_info ./disk.img | grep bigtime = reflink=1 bigtime=1 inobtcount=1 $ sudo mount ./disk.img /mnt $ sudo chown `id -u`:`id -g` /mnt 1 2 10 / 24
  6. 1 2038年12月31日のファイルを作成 2 2500年12月31日のファイルを作成 3 2038年12月31日になっている 4 2486年07月03日になっている $ touch

    -d '20381231' /mnt/2038 $ touch -d '25001231' /mnt/2500 $ ls -lA /mnt 合計 0 -rw-r--r--. 1 matoken matoken 0 12月 31 2038 2038 -rw-r--r--. 1 matoken matoken 0 7月 3 2486 2500 $ stat --format %y /mnt/2500 2486-07-03 05:20:24.000000000 +0900 1 2 3 4 11 / 24
  7. RHEL 9 で XFS 作成(bigtime=0) RHEL 9 で XFS 作成(bigtime=0)

    $ sudo mkfs.xfs -f -m bigtime=0 ./disk.img $ xfs_info ./disk.img | grep bigtime = reflink=1 bigtime=0 inobtcount=1 $ sudo mount ./disk.img /mnt $ sudo chown `id -u`:`id -g` /mnt $ touch -d '20381231' /mnt/2038 $ ls -lA /mnt 合計 0 -rw-r--r--. 1 matoken matoken 0 1月 19 2038 2038 $ stat --format %y /mnt/2038 2038-01-19 12:14:07.000000000 +0900 12 / 24
  8. bigtime 0→1 bigtime 0→1 1 マウント状態だと失敗 2 アンマウントして 3 bigtime=1

    に設定 4 bigtime=1 になっているのを確認 $ sudo xfs_admin -O bigtime=1 ./disk.img : ERROR: The filesystem has valuable metadata changes in a log which needs to be replayed. Mount the filesystem to replay the log, and unmount it before re-running xfs_repair. If you are unable to mount the filesystem, then use the -L option to destroy the log and attempt a repair. Note that destroying the log may cause corruption -- please attempt a mount of the filesystem before doing this. $ sudo umount /mnt $ sudo xfs_admin -O bigtime=1 ./disk.img Running xfs_repair to upgrade filesystem. : done $ xfs_info ./disk.img | grep bigtime = reflink=1 bigtime=1 inobtcount=1 1 2 3 4 13 / 24
  9. $ sudo mount ./disk.img /mnt $ sudo chown `id -u`:`id

    -g` /mnt $ touch -d '20381231' /mnt/2038 $ touch -d '20391231' /mnt/2039 $ touch -d '25001231' /mnt/2500 $ ls -lA /mnt 合計 0 -rw-r--r--. 1 matoken matoken 0 12月 31 2038 2038 -rw-r--r--. 1 matoken matoken 0 12月 31 2039 2039 -rw-r--r--. 1 matoken matoken 0 7月 3 2486 2500 $ stat --format %y /mnt/2500 2486-07-03 05:20:24.000000000 +0900 14 / 24
  10. bigtime 1→0 は無理 bigtime 1→0 は無理 $ sudo umount /mnt

    $ sudo xfs_admin -O bigtime=0 ./disk.img Running xfs_repair to upgrade filesystem. -c bigtime only supports upgrades 15 / 24
  11. RHEL 9 で作った XFS を ML 8.4 RHEL 9 で作った

    XFS を ML 8.4 で利用 で利用 RHEL 9 で bigtime=0 と bigtime=1 のXFS を用意 マウントできない RHEL9$ dd if=/dev/zero of=./rhel9-xfs-bigtime=0.img bs=1M count=64 && mkfs.xfs -m bigtime=0 ./ RHEL9$ dd if=/dev/zero of=./rhel9-xfs-bigtime=1.img bs=1M count=64 && mkfs.xfs -m bigtime=1 ./ RHEL9$ rsync -avzcP ./rhel9-xfs-bigtime\=?.img MIRACLELINUX:~/ ML8.4$ sudo mount ./rhel9-xfs-bigtime\=0.img /mnt mount: /mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or help ML8.4$ sudo mount ./rhel9-xfs-bigtime\=1.img /mnt mount: /mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or help 16 / 24
  12. bigtime と inobtcount も 0 にする bigtime と inobtcount も

    0 にする とマウントできた とマウントできた RHEL9$ mkfs.xfs -m bigtime=0,inobtcount=0 ./rhel9-xfs-bigtime\=0.img RHEL9$ xfs_info ./rhel9-xfs-bigtime\=0.img | grep -E 'bigtime|inobtcount' meta-data=./rhel9-xfs-bigtime=0.img isize=512 agcount=4, agsize=4096 blks = reflink=1 bigtime=0 inobtcount=0 RHEL9$ rsync -avzcP ./rhel9-xfs-bigtime\=0.img MIRACLELINUX:~/ ML8.4$ xfs_info ./rhel9-xfs-bigtime\=0.img | grep -E 'bigtime|inobtcount' ML8.4$ sudo mount ./rhel9-xfs-bigtime\=0.img /mnt ML8.4$ sudo touch -d '20381231' /mnt/2038 ML8.4$ stat --format %y /mnt/2038 2038-01-19 12:14:07.000000000 +0900 17 / 24
  13. 余録1)Debian での XFS bigtime 余録1)Debian での XFS bigtime Debian sid

    で xfsprogs のchangelogを確認.5.10-rc1から bigtime が使えるようになっている,規定値になったのは5.15.0-rc1 から 現在の安定版のDebian bullseyeから利用可能で,次期リリースの bookwormから規定値になりそう xfsprogs-5.10.0-rc1 (04 Dec 2020) - xfsprogs: Add bigtime feature for Y2038 (Darrick Wong) xfsprogs-5.15.0-rc1 (11 Mar 2022) - mkfs: enable inobtcount and bigtime by default (Darrick J. Wong) 19 / 24
  14. 余録2)Debian sid ext4での時間 余録2)Debian sid ext4での時間 Debian Bullseye(linux 5.10.0-16, e2fsprogs

    1.46.2-2)で は2038年まで,sid(Linux 5.18.0-3, e2fsprogs 1.46.5-2)で は2446年までのよう.詳細は未確認. $ dd if=/dev/zero of=./disk.img bs=1M count=20 $ sudo mkfs.ext4 ./disk.img $ sudo mount ./disk.img /mnt $ sudo chown `id -u`:`id -u` /mnt $ touch -t '203902022222.22' /mnt/time-2039 $ touch -t '250002022222.22' /mnt/time-2500 $ ls -lA /mnt 合計 12 drwx------ 2 root root 12288 8月 20 03:49 lost+found -rw-r--r-- 1 matoken matoken 0 2月 2 2039 time-2039 -rw-r--r-- 1 matoken matoken 0 5月 11 2446 time-2500 20 / 24
  15. 余録3)Debian sid btrfsでの時間 余録3)Debian sid btrfsでの時間 Debian Bullseye(btrfs-progs 5.10.1-2-amd64)では2107 年7月まで,sid(btrfs-progs

    5.18.0-3-amd64)では9999年12 月まで? $ touch -t '999912312359.59' ./time-9999 $ touch -t '1000001010000.00' ./time-10000 touch: `1000001010000.00': 無効な日付の書式です $ ls -l ./time-* -rw-r--r-- 1 matoken matoken 0 2月 2 2039 ./time-2039 -rw-r--r-- 1 matoken matoken 0 2月 2 2500 ./time-2500 -rw-r--r-- 1 matoken matoken 0 2月 2 2900 ./time-2900 -rw-r--r-- 1 matoken matoken 0 2月 2 5000 ./time-5000 -rw-r--r-- 1 matoken matoken 0 2月 2 9000 ./time-9000 -rw-r--r-- 1 matoken matoken 0 2月 2 9999 ./time-9999 21 / 24
  16. と思ったけどエラーが出るの変 と思ったけどエラーが出るの変 だなとfaketimeコマンドを試すと だなとfaketimeコマンドを試すと もっと行けた もっと行けた 恐らく,touchコマンドが9999年まで,faketimeコマンドが 999999999年まで $ faketime

    "9999999990101" touch 999999999 $ faketime "99999999990101" touch 9999999999 date: `99999999990101' は無効な日付です Error: Timestamp to fake not recognized, please re-try with a different timestamp. $ ls -l 99999* -rw-r--r-- 1 matoken matoken 0 1月 1 99999 99999 -rw-r--r-- 1 matoken matoken 0 1月 1 999999 999999 -rw-r--r-- 1 matoken matoken 0 1月 1 9999999 9999999 -rw-r--r-- 1 matoken matoken 0 1月 1 99999999 99999999 -rw-r--r-- 1 matoken matoken 0 1月 1 999999999 999999999 22 / 24
  17. utimeで更に utimeで更に 92233720368年54月77日58分07秒?? $ touch 9999999999 $ utime '999999999912312359.59' '999999999912312359.59'

    9999999999 $ stat --format %y ./9999999999 999999999912312359.000000000 $ touch 99999999999 $ utime '9999999999912312359.59' '9999999999912312359.59' 99999999999 $ stat --format %y ./99999999999 9223372036854775807.000000000 23 / 24