une2fs:作成日はどの時間帯にありますか?変更できますか?

une2fs:作成日はどの時間帯にありますか?変更できますか?

私はLinuxディストリビューションのインストール期間を確認するためにune2fsを使用してきましたが、タイムゾーンがわからない場合、ここに含まれる日付はあまり役に立ちません。私が使った正確なコマンドはここ、明確にするために:

sudo tune2fs -l /dev/sda3 | grep created | sed 's/.*created\:\s*//g'

ただし、出力は次の形式です。

Fri Jun 23 23:59:22 2017

タイムゾーンは言及されていません。ただし、date次の形式の出力を返します。

Sun Jul 23 17:58:18 AEST 2017

AESTタイムゾーンがどのように言及されているかをご覧ください。マンページを読みました。tune2fs。 Webブラウザの検索ユーティリティを使用して「日付」、「作成」、「時間」を検索しましたが、日付形式のタイムゾーンに言及しているか、手動で設定する方法があるかどうかがわかりませんでした。 DuckDuckGoを実行して「tune2fs date」と「tune2fs timezone」を検索しました。

答え1

時間はUnix epoch時間として保存されますs_mkfs_timeスーパーブロック) カレンダーの日付ではなく、時間帯に依存しません。

表示するときは、tune2fsカレンダー/人の日付に変換して、あなたのタイムゾーンに合った表現を提供してください。

UTC時間を取得するには、次のコマンドを実行します。

TZ=UTC0 LC_ALL=C tune2fs -l /dev/sda3 |
  sed -n 's/^Filesystem created: *//p'

これは、tune2fsタイムゾーンがUTC(UTCから0オフセット)であることを示します。

Filesystem created英語で返され、日付がユーザーのロケールに関係なく(将来国際化される場合)、アメリカ英語スタイルで表示されるようにLC_ALL = Cを追加しました。e2fsprogs

スーパーブロックのオフセット0x108にあり、スーパーS_mkfs_timeブロックはブロックデバイス内のオフセット0x400から始まり、エポック時間を手動で取得することもできます。

od -vAn -j 0x508 -N4 < /dev/sda3

好きな形式に変換してください。

$ date --iso-8601=s -d "@$(od -An -j0x508 -N4 -tu4 < /some/device)"
2017-07-23T12:20:22+01:00
$ date -u --iso-8601=s -d "@$(od -An -j0x508 -N4 -tu4 < /some/device)"
2017-07-23T11:20:22+00:00

答え2

日付は、作成時のローカルシステムタイムゾーンで表示されるように見えます。

たとえば、私の/bootパーティションはraid-1(/dev/md0)のext4です。これは、昨年ブートドライブを4つのSSDに置き換えてZFSからルートに変換したときに作成されました。場合に備えて/boot ext4パーティションを維持しました。

# tune2fs -l /dev/md0 | sed -n -e 's/.*created\:\s*//gp'
Sat Oct  8 16:38:45 2016

# TZ=UTC tune2fs -l /dev/md0 | sed -n -e 's/.*created\:\s*//gp'
Sat Oct  8 05:38:45 2016

私もオーストラリア東海岸(メルボルン)にあり、16:38と05:38の差は11時間です。これはAEDTに適しています(10月に始まる夏時間を守るための注意の場合)。


しかし、grepの出力をsedやawkにパイプする必要はほとんどありません。どちらも正規表現パターンマッチングを実行できます。 awkの例は次のとおりです。

# tune2fs -l /dev/md0 | awk -F': +' '/created/ {print $2}'
Sat Oct  8 16:38:45 2016

関連情報