2020년에 Linux에서 inode/파일/디렉토리의 crtime(생성 시간)을 복사하거나 복원할 수 있는 방법이 있는지 알고 싶습니다. 실수로 폴더를 삭제했는데 여전히 전체 디스크 백업이 있지만 cp -a나 rsync 중 어느 것도 crtimes 파일/디렉터리를 복원/복사할 수 없습니다.
debugfs를 사용하여 구현하는 방법을 찾았지만 매우 복잡하고 자동화해야 합니다(수백 개의 파일/디렉토리를 삭제했습니다).
소스 디스크에 대해 다음을 수행합니다.
# debugfs /dev/sdXX
# stat /path
Inode: 432772 Type: directory Mode: 0700 Flags: 0x80000
Generation: 3810862225 Version: 0x00000000:00000006
User: 1000 Group: 1000 Project: 0 Size: 4096
File ACL: 0
Links: 5 Blockcount: 8
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x5db96479:184bb16c -- Wed Oct 30 15:22:49 2019
atime: 0x5b687c70:ee4dff18 -- Mon Aug 6 21:50:56 2018
mtime: 0x5db96479:184bb16c -- Wed Oct 30 15:22:49 2019
crtime: 0x5b687c70:d35d1348 -- Mon Aug 6 21:50:56 2018
Size of extra inode fields: 32
Extended attributes:
security.selinux (40)
EXTENTS:
(0):1737229
crtime_lo
crtime을 기억하세요. 이는 (예, 첫 번째) 및 crtime_hi
(두 번째) 의 두 필드입니다.
그런 다음 대상 디스크에 대해 다음을 수행할 수 있습니다.
# debugfs -w /dev/sdYY
# set_inode_field /path crtime_lo 0x${1st_value_from_earlier}
# set_inode_field /path crtime_hi 0x${2nd_value_from_earlier}
어쩌면 이 작업을 수행하는 데 도움이 될 만한 내용이 debugfs 매뉴얼에 빠져 있을 수도 있으므로, 사람들이 도와주면 기쁠 것입니다.
-f cmd_file
시작하기 좋은 방법인 것 같지만 여전히 나에게는 너무 어렵습니다.
답변1
사실 제가 직접 해결했어요. 시도하지 않으면 무엇을 할 수 있는지 결코 알 수 없습니다 :-)
확실히 그렇습니다안전한모든 파일 시스템이 읽기-쓰기로 마운트된 경우에도 작동합니다.
#! /bin/bash
dsk_src=/dev/sdc4 # source disk with original timestamps
mnt_src=/mnt/sdc4 # source disk mounted at this path
dsk_dst=/dev/sda4 # destination disk
directory=user/.thunderbird # the leading slash _must_ be omitted
cd $mnt_src || exit 1
find $directory -depth | while read name; do
read crtime_lo crtime_hi < <(debugfs -R "stat \"/$name\"" $dsk_src 2>/dev/null | awk '/crtime:/{print $2}' | sed 's/0x//;s/:/ /')
echo "File: $name"
echo "crtime_lo: $crtime_lo"
echo "crtime_hi: $crtime_hi"
debugfs -w $dsk_dst -R "set_inode_field \"/$name\" crtime_lo 0x$crtime_lo"
debugfs -w $dsk_dst -R "set_inode_field \"/$name\" crtime_hi 0x$crtime_hi"
done
사람들이 관심이 있다면 스크립트를 수정하여 파티션 내에서 사용할 수 있도록 할 수 있습니다 cp -a
. 실제로는 매우 쉽습니다.
답변2
모든 타임스탬프가 포함된 최신 tar 아카이브가 있는 경우 star -xp -ctime ...
루트로 호출하면 이 작업을 수행할 수 있습니다.star
이로 인해 star
시간 폭풍이 발생할 수 있으므로 심각한 다중 사용자 모드에서는 수행하면 안 됩니다.
바라보다http://schilytools.sourceforge.net/man/man1/star.1.html더 많은 정보를 알고 싶습니다.
답변3
Windows에서는 다음을 사용합니다.https://github.com/matt-wu/Ext3Fsdext4 파티션을 마운트합니다. 그런 다음 ext 파티션이 Windows 시스템에 로컬 파티션처럼 마운트되어 NTFS처럼 정상적으로 액세스할 수 있습니다.
현재 rsync, SyncToy, UrBackup 및 Windows에서 파일 생성 시간을 유지할 수 있는 기타 소프트웨어와 같은 일부 소프트웨어를 Windows에서 사용할 수 있습니다. ntfs 파일을 EXT4에 동기화하고 생성 시간을 비교한 다음 마운트합니다. ext4를 사용하면 Deep Linux 시스템과 비교하여 생성 시간이 항상 동기화됩니다.
Windows는 github matt-wu/Ext3Fsd를 통해 생성 시간을 보존할 수 있지만 Linux는 그렇지 않습니다.