

### 目的

Linuxで誤って上書きしてしまった指定のファイルを復元したい  
`/dev/sda3` に入っている `/home/Documents/target` を、指定した時刻以前の状態に戻したい

**USBブートしている環境**

[code]

    Linux ubuntu 5.0.0-23-generic #24~18.04.1-Ubuntu SMP Mon Jul 29 16:12:28 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
    
[/code]

### 状況

LDME 4で 誤ってテキストファイルを上書きしてしまったので上書き後気が付き次第システムを終了した。  
このディスクは暗号化されている。またブートし、ログインするためのパスワードはわかっており以下のようにパーティション分けされておりファイルシステムはext4となっている。

[code]

    ubuntu@ubuntu:/$sudo fdisk -l
    (不要なので略)
    ディスク /dev/sda: 931.5 GiB, 1000204886016 バイト, 1953525168 セクタ
    単位: セクタ (1 * 512 = 512 バイト)
    セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
    I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
    ディスクラベルのタイプ: gpt
    ディスク識別子: 014F04A8-0B49-4946-ADB2-5897AB304DBC
    (不要なので略)
    
[/code]

その後USBブートできるUSBがあったのでUSBブートを行いext4magicを用いて復元しようとするために `ext4magic /dev/sda3/
-l` とコマンドを入力したところ、下記のようになり復元できるかどうかわからない。

これを復元できるかどうか確認した上で復元できる場合復元するにはどうしたらいいでしょうか？  
よろしくお願いします。

[code]

    ubuntu@ubuntu:/$ sudo ext4magic /dev/sda3 -l
    Filesystem in use: /dev/sda3
    
    Using  internal Journal at Inode 8
    Inode 2 is allocated
      100%   ユーザー名/.ecryptfs 
      100%   ユーザー名/.Private 
      100%   ユーザー名/README.txt 
      100%   ユーザー名/Access-Your-Private-Data.desktop 
      100%   .ecryptfs/ユーザー名/.ecryptfs/auto-mount 
      100%   .ecryptfs/ユーザー名/.ecryptfs/auto-umount 
      100%   .ecryptfs/ユーザー名/.Private/ECRYPTFS_FNEK_ENCRYPTED.FWYbEn2jq0WNZEQ9FnS7MM8kugeCun6XcL0xDfiKNzUxK9rB8KYKbC9n0---/ECRYPTFS_FNEK_ENCRYPTED.FWYbEn2jq0WNZEQ9FnS7MM8kugeCun6XcL0xzacwkg3SVGakXQQNx5ng2E--/ECRYPTFS_FNEK_ENCRYPTED.FWYbEn2jq0WNZEQ9FnS7MM8kugeCun6XcL0xR2yYBhIcJh2Vv870qanAF---/ECRYPTFS_FNEK_ENCRYPTED.FWYbEn2jq0WNZEQ9FnS7MM8kugeCun6XcL0x23EOPNzvxLA6OE5IgFszB---/ECRYPTFS_FNEK_ENCRYPTED.FWYbEn2jq0WNZEQ9FnS7MM8kugeCun6XcL0x6JtaV1UG-ELXyhOaTzmowE--/ECRYPTFS_FNEK_ENCRYPTED.FWYbEn2jq0WNZEQ9FnS7MM8kugeCun6XcL0xH-sMlUWqCoRvHDIaqzXiAE--
    (略)
    ext4magic : EXIT_SUCCESS
    
[/code]

**参考**

[code]

    ubuntu@ubuntu:/$ df -T
    Filesystem     Type     1K-blocks     Used Available Use% Mounted on
    udev           devtmpfs  15348412        0  15348412   0% /dev
    tmpfs          tmpfs      3081220     1780   3079440   1% /run
    /dev/sdb1      vfat      61256224  2001952  59254272   4% /cdrom
    /dev/loop0     squashfs   1895936  1895936         0 100% /rofs
    /cow           overlay   15406096   737076  14669020   5% /
    tmpfs          tmpfs     15406096    78728  15327368   1% /dev/shm
    tmpfs          tmpfs         5120        4      5116   1% /run/lock
    tmpfs          tmpfs     15406096        0  15406096   0% /sys/fs/cgroup
    tmpfs          tmpfs     15406096      532  15405564   1% /tmp
    tmpfs          tmpfs      3081216       64   3081152   1% /run/user/999
    /dev/loop1     squashfs     90624    90624         0 100% /snap/core/7270
    /dev/loop2     squashfs     55808    55808         0 100% /snap/core18/1074
    /dev/loop3     squashfs     43904    43904         0 100% /snap/gtk-common-themes/1313
    /dev/loop4     squashfs    153600   153600         0 100% /snap/gnome-3-28-1804/67
    /dev/loop5     squashfs      4224     4224         0 100% /snap/gnome-calculator/406
    /dev/loop6     squashfs     15104    15104         0 100% /snap/gnome-characters/296
    /dev/loop7     squashfs      1024     1024         0 100% /snap/gnome-logs/61
    /dev/loop8     squashfs      3840     3840         0 100% /snap/gnome-system-monitor/100
    /dev/sda3      ext4     102688032 26638320  70790448  28% /media/ubuntu/140fda0e-449f-4b18-a94c-c0c5c6a6064e
    
[/code]

**ディレクトリ構造**

[code]

    ubuntu@ubuntu:/media$ sudo tree -a -L 5 .
    .
    ├── cdrom -> /cdrom
    └── ubuntu
        └── 140fda0e-449f-4b18-a94c-c0c5c6a6064e
            ├── .ecryptfs
            │   └── ユーザー名
            │       ├── .Private
            │       └── .ecryptfs
            ├── ユーザー名
            │   ├── .Private -> /home/.ecryptfs/ユーザー名/.Private
            │   ├── .ecryptfs -> /home/.ecryptfs/ユーザー名/.ecryptfs
            │   ├── Access-Your-Private-Data.desktop -> /usr/share/ecryptfs-utils/ecryptfs-mount-private.desktop
            │   └── README.txt -> /usr/share/ecryptfs-utils/ecryptfs-mount-private.txt
            └── lost+found
    
[/code]

追記  
cubick♦さんの示したコマンドを入力したところ次のようになり復元できませんでした

[code]

    ubuntu@ubuntu:~$ sudo ext4magic /dev/sda3 -a 時刻はじめ  -b 時刻おわり -r -f "home/Documents/target"
    "RECOVERDIR"  accept for recoverdir
    Filesystem in use: /dev/sda3
    
    Using  internal Journal at Inode 8
    Activ Time after  : Mon Jul 20 時刻はじめ 2020
    Activ Time before : Mon Jul 20 時刻終わり 2020
    Error: Inode not found for "home/Documents/target"
    Check the valid PATHNAME "home/Documents/target" and the BEFORE option "Mon Jul 20 13:50:38 2020
    "
    ext4magic : EXIT_SUCCESS
    
[/code]

そもそもそのようなパスがないということでこのinode自体がすでに削除されているのか暗号化が解除されておらずパスがわからないかがわからないのでわからないので一度暗号化されたディスクを作成し似たような状況を作成しすぐにシャットダウンを行いこのコマンドで暗号化されたディスクから復元できるかを試してみます


CC BY-SA 4.0
2020-07-20T13:35:04.687
68759
2020-07-21T11:19:18.650
2020-07-21T11:19:18.650
41172
41172
question
linux
Linuxで誤って上書きしてしまったファイルを復元したい


詳しい使い方は `man ext4magic` や
[オンラインマニュアル](http://manpages.ubuntu.com/manpages/xenial/man8/ext4magic.8.html)
も必ず参照してみてください。

一番シンプルな条件を当てはめると

  * パーティションはスワップ等を除けば `/` の `/dev/sda3`
  * 復元対象の `/home/Documents/target` はファイルと仮定

今回のケースでは以下のような実行方法になりそうです。

[code]

    $ sudo ext4magic /dev/sda3 -f "home/Documents/target"
    
[/code]

  * もし日付や時刻に当たりが付いているなら、`-a` や `-b` オプションも併用する
  * ターゲットがディレクトリの場合は `-r` も追加する
  * 復元先のディレクトリに注意！ (元のパーティションとは別の保存先を用意しておく)


CC BY-SA 4.0
2020-07-20T16:48:23.900
68763
2020-07-20T16:48:23.900
3060
68759
answer