Saya baru saja membaca di Birth
bagian stat
dan tampaknya ext4 harus mendukungnya, tetapi bahkan file yang saya buat membiarkannya kosong.
~ % 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
Mengapa ext4
partisi saya tidak mengisi bidang ini?
filesystems
ext4
stat
xenoterracide
sumber
sumber
/home/user/path/to/file
karena/home
berada di partisi yang terpisah. Dalam hal itu, jalur yang disediakanstat
harus relatif terhadap/home
. Contoh:sudo debugfs -R 'stat user/path/to/file' /dev/sda2
. Untuk menghilangkan penanganan jalur, kami dapat memberikanstat
nomor inode alih-alih jalur:sudo debugfs -R "stat <$(stat -c %i /home/user/path/to/file)>" /dev/sda5
<
dan di>
sekitar nomor inode diperlukan. Mereka sering digunakan dalam contoh untuk mengelilingi variabel yang harus disesuaikan, tetapi dalam kasus ini mereka harus dimasukkan secara harfiah. Tanpa mereka, nomor inode diperlakukan sebagai jalur, dan Anda mendapatkanFile not found by ext2_lookup
kesalahan.Saya menggabungkan ini ke dalam fungsi shell sederhana:
Anda kemudian dapat menjalankannya
sumber
The
xstat
fungsi tidak pernah mendapat digabung menjadi arus utama. Namun,statx
panggilan baru diusulkan kemudian , dan digabungkan dalam Linux 4.11 .statx(2)
Panggilan sistem baru tidak termasuk waktu pembuatan dalam struct kembali. Wrapper untukstatx(2)
ditambahkan ke glibc hanya pada 2,28 (rilis Agustus 2018) . Dan dukungan untuk menggunakan pembungkus ini ditambahkan dalam GNU coreutils 8.31 (dirilis Maret 2019):Berikut ini adalah demo di
statx
mana userland belum menyusul (glibc atau coreutils lama). Tidak mudah untuk memanggil panggilan sistem secara langsung dalam program C. Biasanya glibc menyediakan pembungkus yang memudahkan pekerjaan, tetapi Untungnya, @whotwagner menulis contoh program C yang menunjukkan cara menggunakanstatx(2)
pemanggilan sistem pada sistem x86 dan x86-64. Outputnya adalah format yang sama denganstat
default, tanpa opsi format apa pun, tetapi mudah untuk memodifikasinya untuk mencetak waktu kelahiran saja. (Jika Anda memiliki glibc yang cukup baru, Anda tidak memerlukan ini - Anda dapat menggunakanstatx
secara langsung seperti yang dijelaskan dalamman 2 statx
).Pertama, klon:
Anda dapat mengkompilasi
statx.c
kode, atau, jika Anda hanya ingin waktu kelahiran, buatbirth.c
di direktori kloning dengan kode berikut (yang merupakan versi minimal daristatx.c
pencetakan hanya cap waktu pembuatan termasuk ketepatan nanosecond):Kemudian:
Secara teori ini harus membuat waktu pembuatan dapat diakses pada lebih banyak filesystem daripada hanya ext * (
debugfs
merupakan alat untuk filesystem ext2 / 3/4, dan tidak dapat digunakan pada yang lain). Itu berhasil untuk sistem XFS, tetapi tidak untuk NTFS dan exfat. Saya kira sistem file FUSE untuk mereka yang tidak termasuk waktu pembuatan.sumber
Ada kasus lain di mana waktu Lahir akan kosong / nol / putus: ukuran Inode Ext4 harus setidaknya 256bytes untuk disimpan
crtime
. Masalah terjadi jika Anda awalnya membuat sistem file lebih kecil dari 512MB (ukuran Inode default akan menjadi 128 byte, lihat/etc/mke2fs.conf
danmkfs.ext4
manpage).dan / atau
Sekarang periksa inode sistem file (apakah cukup besar untuk menyimpan
crtime
?):Informasi teknis: Pada halaman Layout Disk Ext4 , perhatikan bahwa beberapa atribut dari tabel inode melebihi 0x80 (128).
sumber
mke2fs.c
pada baris 1275Untuk apa nilainya saya merasa sangat bertele-tele jadi menulis bash wrapper sekitar stat untuk diam-diam mendukung crtime menggunakan debugfs untuk mengambilnya dari sistem file ext4 yang mendasarinya jika tersedia. Saya harap ini kuat. Temukan di sini .
Perhatikan bahwa perbaikan tampaknya ada di daftar todo untuk Linux seperti yang didokumentasikan dalam skrip itu. Jadi bungkus ini memiliki umur nominal hanya sampai itu selesai dan lebih merupakan latihan dalam apa yang bisa dilakukan.
sumber
xstat()
akhirnya telah ditambahkan ke Linux, jadi tinggal menunggu waktu sebelum libc GNU danfind
tambahkan dukungan untuk itu.