tune2fs: qual fuso horário é a data criada e é possível alterá-lo?

3

Eu tenho usado o tune2fs para determinar a idade das minhas instalações de distribuição do Linux, mas sem saber o fuso horário, a data é menos útil. O comando exato que estou usando é de here , aqui é apenas por uma questão de clareza:

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

mas a saída é da forma:

Fri Jun 23 23:59:22 2017

Observe como não há fuso horário mencionado. Mas date retorna a saída do formulário:

Sun Jul 23 17:58:18 AEST 2017

Observe como o fuso horário AEST é mencionado. Eu li a man page de tune2fs . Eu procurei por "date", "created", "time" usando o utilitário find do meu navegador da web e não encontrei uma única menção do fuso horário do formato de data ou se há uma maneira de definir manualmente isto. Eu executei as pesquisas DuckDuckGo para "tune2fs date" e "tune2fs timezone" e olhei os cinco principais resultados e não consegui encontrar nada relevante neles.

    
por Brenton Horne 23.07.2017 / 10:11

2 respostas

2

A data parece ser exibida no fuso horário do sistema local no momento em que foi criada.

por exemplo. minha partição / boot é ext4 em raid-1 (/ dev / md0), criada quando substituí minhas unidades de inicialização por 4 SSDs e converti para root no ZFS no ano passado. Eu mantive uma partição / boot ext4 em caso de emergência.

# 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

Eu também estou na costa leste da Austrália (Melbourne), e a diferença entre 16:38 e 05:38 é de 11 horas, o que é correto para AEDT (o horário de verão começa em outubro para aqueles estados que o observam)

BTW, quase nunca é necessário canalizar a saída do grep para sed ou awk. ambos já podem fazer correspondências de padrão regexp. um exemplo de awk pode ser assim:

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

A hora é armazenada como uma hora da época do Unix (consulte s_mkfs_time no superbloco ), não como uma data do calendário, por isso é independente do fuso horário.

Ao exibi-lo, tune2fs o converte em uma data de calendário / human para lhe dar uma representação significativa para você, no seu fuso horário.

Para obter o horário no UTC, execute-o com:

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

Isso indica a tune2fs que seu fuso horário é UTC (com 0 deslocamento de UTC).

Eu adicionei LC_ALL = C para garantir que Filesystem created seja retornado em inglês e a data ainda seja exibida no estilo EUA-Inglês, independentemente da localidade do usuário (no caso de e2fsprogs serem internacionalizados no idioma futuro).

Como o S_mkfs_time está no deslocamento 0x108 no superbloco e o superbloco começa no deslocamento 0x400 dentro do dispositivo de bloco, você também pode recuperar esse tempo de época manualmente:

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

E converta-o no formato que você gosta:

$ 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
    
por 23.07.2017 / 13:29