Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. XFSのbigtimeを少
    XFSのbigtimeを少
    し試してみた
    し試してみた
    (RHEL9 & ML8.4)
    (RHEL9 & ML8.4)
    Kenichiro Matohara(matoken)
    1 / 24

    View Slide

  2. 南隅から参加(鹿児島の右下)
    お仕事募集 mailto:work@matohara.org
    Kenichiro Matohara(matoken)
    Kenichiro Matohara(matoken)
    https://matoken.org
    https://matoken.org
    2 / 24

    View Slide

  3. Linux User Groupによく居ます
    Linux User Groupによく居ます
    東海道らぐ 次回2022-08-27
    LILO 次回2022-08-27
    小江戸らぐ 次回2022-09-10
    鹿児島らぐ 次回2022-09-18
    3 / 24

    View Slide

  4. 「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

    View Slide

  5. XFS
    XFS
    Silicon Graphics, Inc. がIRIX向けに開発した64bitファイルシ
    ステム.1994年〜
    1999年にLinux版がGPLで公開
    2.4.21〜Linux kernelに同梱
    RHEL7 から標準FSに
    5 / 24

    View Slide

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

    View Slide

  7. bigtaimeの動きを確認
    bigtaimeの動きを確認
    7 / 24

    View Slide

  8. 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

    View Slide

  9. 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

    View Slide

  10. 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

    View Slide

  11. 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

    View Slide

  12. 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

    View Slide

  13. 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

    View Slide

  14. $ 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

    View Slide

  15. 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

    View Slide

  16. 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

    View Slide

  17. 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

    View Slide

  18. まとめ
    まとめ
    RHEL 9(Linux 5.10)よりXFSのbigtimeで2486年7月までの
    タイムスタンプに対応
    bigtimeが無効なXFSファイルシステムはアンマウントした状態で
    有効にすることができる(無効に戻すことはできない)
    bigtimeが有効なXFSファイルシステムは5.10より前の環境では
    マウントできない
    2038年は結構近い?2486年は今生きている人間が触ることはな
    さそう?
    18 / 24

    View Slide

  19. 余録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

    View Slide

  20. 余録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

    View Slide

  21. 余録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

    View Slide

  22. と思ったけどエラーが出るの変
    と思ったけどエラーが出るの変
    だなと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

    View Slide

  23. 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

    View Slide

  24. 奥付
    奥付
    発表
    2022-08-26(Fri)
    発表者
    利用ソフトウェア
    ライセンス
    MIRACLE LINUXでやってみた、触ってみた !!LT大会!!
    Kenichiro Matohara(matoken)
    Asciidoctor Reveal.js
    CC BY 4.0
    24 / 24

    View Slide