Je viens de lire sur la Birth
section de stat
et il semble que ext4 devrait la supporter, mais même un fichier que je viens de créer la laisse vide.
~ % touch test slave-iv
~ % stat test.pl slave-iv
File: ‘test.pl’
Size: 173 Blocks: 8 IO Block: 4096 regular file
Device: 903h/2307d Inode: 41943086 Links: 1
Access: (0600/-rw-------) Uid: ( 1000/xenoterracide) Gid: ( 100/ users)
Access: 2012-09-22 18:22:16.924634497 -0500
Modify: 2012-09-22 18:22:16.924634497 -0500
Change: 2012-09-22 18:22:16.947967935 -0500
Birth: -
~ % sudo tune2fs -l /dev/md3 | psp4 slave-iv
tune2fs 1.42.5 (29-Jul-2012)
Filesystem volume name: home
Last mounted on: /home
Filesystem UUID: ab2e39fb-acdd-416a-9e10-b501498056de
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: journal_data
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 59736064
Block count: 238920960
Reserved block count: 11946048
Free blocks: 34486248
Free inodes: 59610013
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 967
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
RAID stride: 128
RAID stripe width: 256
Flex block group size: 16
Filesystem created: Mon May 31 20:36:30 2010
Last mount time: Sat Oct 6 11:01:01 2012
Last write time: Sat Oct 6 11:01:01 2012
Mount count: 14
Maximum mount count: 34
Last checked: Tue Jul 10 08:26:37 2012
Check interval: 15552000 (6 months)
Next check after: Sun Jan 6 07:26:37 2013
Lifetime writes: 7255 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
First orphan inode: 55313243
Default directory hash: half_md4
Directory Hash Seed: 442c66e8-8b67-4a8c-92a6-2e2d0c220044
Journal backup: inode blocks
Pourquoi ma ext4
partition ne remplit-elle pas ce champ?
filesystems
ext4
stat
xénoterracide
la source
la source
/home/user/path/to/file
parce qu'il/home
était sur une partition séparée. Dans ce cas, le chemin fourni àstat
doit être relatif à/home
. Exemple:sudo debugfs -R 'stat user/path/to/file' /dev/sda2
. Pour se débarrasser de la gestion du chemin, nous pouvons fournirstat
le numéro d'inode au lieu du chemin:sudo debugfs -R "stat <$(stat -c %i /home/user/path/to/file)>" /dev/sda5
<
et>
autour du numéro d'inode sont obligatoires. Ils sont souvent utilisés dans des exemples pour entourer une variable qui doit être ajustée, mais dans ce cas, ils doivent être entrés littéralement. Sans eux, le numéro d'inode est traité comme un chemin et vous obtenez uneFile not found by ext2_lookup
erreur.J'ai combiné cela dans une simple fonction shell:
Vous pouvez ensuite le lancer avec
la source
La
xstat
fonction n'a jamais été fusionnée dans Mainline. Cependant, un nouvelstatx
appel a été proposé ultérieurement et a été fusionné dans Linux 4.11 . Le nouvelstatx(2)
appel système inclut une heure de création dans sa structure de retour. Une enveloppe pour astatx(2)
été ajoutée à la glibc uniquement en 2.28 (sortie en août 2018) . Et le support pour l'utilisation de ce wrapper a été ajouté dans GNU coreutils 8.31 (publié en mars 2019):Ce qui suit est une démonstration de l’
statx
endroit où l’utilisateur n’a pas encore rattrapé son retard (ancien glibc ou coreutils). Il n'est pas facile d'appeler des appels système directement dans un programme C. En général, glibc fournit un wrapper qui facilite le travail, mais Heureusement, @whotwagner a écrit un exemple de programme en C qui montre comment utiliser l'statx(2)
appel système sur les systèmes x86 et x86-64. Sa sortie est au même format que celuistat
par défaut, sans aucune option de formatage, mais il est simple de le modifier pour n’imprimer que l’heure de naissance. (Si vous avez assez de nouvelle glibc, vous n'en aurez pas besoin - vous pouvez utiliserstatx
directement comme décrit dansman 2 statx
).Commencez par le cloner:
Vous pouvez compiler le
statx.c
code ou, si vous voulez seulement l'heure de naissance, créer unbirth.c
dans le répertoire cloné avec le code suivant (qui est une version minimale de l'statx.c
impression uniquement de l'horodatage de création avec une précision à la nanoseconde):Ensuite:
En théorie, cela devrait rendre le temps de création accessible sur plus de systèmes de fichiers que les seuls systèmes ext * (
debugfs
est un outil pour les systèmes de fichiers ext2 / 3/4 et inutilisable pour les autres). Cela a fonctionné pour un système XFS, mais pas pour NTFS et exfat. Je suppose que les systèmes de fichiers FUSE pour ceux-ci n'incluaient pas le moment de la création.la source
Il existe un autre cas où l'heure de naissance sera vide / zéro / tiret: la taille de l'inode d'Ext4 doit être d'au moins 256 octets à stocker
crtime
. Le problème se produit si vous avez initialement créé un système de fichiers inférieur à 512 Mo (la taille par défaut d’Inode sera de 128 octets, voir/etc/mke2fs.conf
et lamkfs.ext4
page de manuel).et / ou
Maintenant, vérifiez l’inode du système de fichiers (est-il assez grand pour être stocké
crtime
?):Informations techniques: Sur la page Disposition du disque Ext4 , notez que certains attributs des tables inode sont supérieurs à 0x80 (128).
la source
mke2fs.c
à la ligne 1275Pour ce que ça vaut, je me sentais pédant alors j'ai écrit un wrapper bash autour de stat pour prendre en charge silencieusement crtime en utilisant debugfs pour le récupérer à partir d'un système de fichiers ext4 sous-jacent, le cas échéant. J'espère que c'est robuste. Trouvez le ici .
Notez qu'un correctif est apparemment dans la liste de tâches pour Linux, comme indiqué dans ce script. Cette enveloppe a donc une durée de vie nominale jusqu'à ce que cela soit fait et constitue davantage un exercice réalisable.
la source
xstat()
a finalement été ajouté à Linux, ce n’est donc qu’une question de temps avant que la GNU libc et lefind
supporte.