iMac の HDD が壊れて、シングルユーザモードでデータを取り出した記録

iMac が起動できなくなり、シングルユーザーモードで外付け HDD に必要ファイルのバックアップを移したところまでの備忘録。

## 症状

* 起動できなくなる2週間ほど前から、画面がちらつく（一瞬暗転）
* 起動途中に強制終了（プログレスバーが6割程度のところでプツンと音がして電源が落ちる）

## 試したこと

* 「ディスクユーティリティ」で「FirstAid」実行→失敗
* 「macOS 復元」で、起動ディスクを修復→失敗
* 「セーフモード起動」確認→できない

![IMG_9536.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114599/b0f9a2e6-5027-7997-f3c1-2299a5f5e0b8.jpeg)

この時点であきらめてデータをサルベージする方向に。

## バックアップ作業

### 1. シングルユーザモードで起動

* 本体電源ON
* 起動直後に <kbd>⌘</kbd>+<kbd>s</kbd> を押す
* CUI の画面が表示される

運が良いと `$ /sbin/fsck -fy` でディスクが修復できるらしいができなかった。

出力結果

```bash
localhost:/ root# fsck -fy
** /dev/rdisk0s2
** Root file system
   Exxecuting fsck_hfs (version hfs-407.50.6).
** Checking Journaled HFS Plus volume.
g'0f*h(-e.ume name is e
** Checking extents overflow file.
** Cehecking catalog file.
disk0s2: I/O error.
g'0f*h(-e. could not be verified completely.
```

### 2. 外付け HDD マウント

* `$ mount -uw /` でルートは読み込みモードになっているので、書き込み可能モードに変更
* `$ ls dev` でデバイス一覧を表示しておく
* USB に HDD を接続
* 再び `$ ls dev` で一覧を表示、増えている差分が差した HDD で `disk1s1` が該当のものであった
    下記でも確認できたかも
    ```bash
    $ df -H
    $ diskutil list
    ```
* `$ fstyp dev/disk1s1` でファイルシステムのタイプを確認する
* マウント用のディレクトリ作成 `$ mkdir -p /tmp/mnt`
* `$ mount -t hfs /dev/disk1s1 /tmp/mnt`

外付け HDD がマウントされた。

余談: ファイルシステムが `msdos` の HDD　にもバックアップ取ろうとして `$ mount_hfs` でマウントしようとした際のエラーメッセージ

```bash
localhost:/ root# hfs /dev/disk1s1 /tmp/mnt
hfs_ValidateHFSPlusVolumeHeader: unknown Volume Signature : 0
hfs_mount: hfs_mountfs returned error=22 for device disk1s1
mount_hfs: error on mount(): error = -1.
mount_hfs:: Invalid argument
```

### 3. ファイルコピー

`tmp/mnt` に `/Users/{user}` から必要なファイルを移す

* バックアップ用ディレクトリ作成
    ```
    $ mkdir /tmp/mnt/2020-05-29-backup
    ```
* コピー
    ```
    $ rsync -auE /Users/{user}/{必要なファイル} /tmp/mnt/2020-05-29-backup
    ```
    →時間かかっていまいちだった `cp` 用いるほうがベターか。
* コピーできているか確認
    ```bash
    $ ls -R | grep -v / | wc -l # ファイル数
    $ du -s {dir} # 容量
    ```

### 4. 外付け HDD 取り外し

どちらでもできた

```bash
$ diskutil eject /dev/disk1s1
$ diskutil unmount disk1s1
```

### 5. 終了

```bash
$ exit

# disk0s2: I/O error. などのメッセージが繰り返し表示されてかなり時間がかかった
```

## マシン

* モデル: iMac (27-inch, Mid 2011)
* OS: macOS High Sierra 10.13.6
* プロセッサ: 2.7GHzクアッドコアIntel Core i5、6MBオンチップ共有三次キャッシュ
* メモリ: 4GB（2GB × 2）1,333MHz DDR3メモリ
* ストレージ: 2.7GHz 1TB（7,200 rpm）ハードドライブ
* グラフィックス: 2.7GHz AMD Radeon HD 6770Mグラフィックプロセッサ（512MB GDDR5メモリ）

## 参考記事

### 起動できないときの対応

* [Macのディスクユーティリティでストレージデバイスを修復する - Apple サポート](https://support.apple.com/ja-jp/guide/disk-utility/dskutl1040/mac)

### 外付けHDDバックアップ

* [起動できないMacの内蔵HDDのデータを外付けHDDにバックアップ - Qiita](https://qiita.com/izibazi@github/items/3ca8d90e93d61bef5921)
* [Mac をシングルユーザモードで復旧(?)したメモ - Qiita](https://qiita.com/propella/items/b51c9a4aa42c57b5335d)
* [OS X: Imaging and repairing a volume that won't mount](https://tinyapps.org/blog/201509100700_os_x_volume_wont_mount.html)

### シングルユーザモード

* [Mac の起動中に Apple ロゴや進行状況バーが表示される場合 - Apple サポート](https://support.apple.com/ja-jp/HT207019)
* [Macをシングルユーザモードで起動する - Apple サポート](https://support.apple.com/ja-jp/guide/mac-help/mchlp1720/mac)

### USB 外付け HDD 操作

* [OSXシングルユーザーモードでUSBメモリをマウントする - blog.daich.org](http://blog.daich.org/2015/06/21/osx-single-user-mode-data-recovery/)
* [MacのターミナルからUSBメモリを安全に取り外す - Qiita](https://qiita.com/FuwattoFlower/items/9e702e704d028a8ae86a)
* [External hfs formated disk access denied … - Apple Community](https://discussions.apple.com/thread/7502762)

    > ```
    > DiskUtil list shows:
    > /dev/disk0
    > #: TYPE NAME SIZE
    > IDENTIFIER
    > 0: GUID_partition_scheme *500.1 GB disk0
    > 1: EFI EFI 209.7 MB disk0s1
    > 2: Apple_HFS Macintosh HD 467.2 GB disk0s2
    > 3: Apple_Boot Recovery HD 650.0 MB disk0s3
    > 4: Microsoft Basic Data BOOTCAMP 32.0 GB disk0s4
    > /dev/disk1
    > #: TYPE NAME SIZE
    > IDENTIFIER
    > 0: GUID_partition_scheme *2.0 TB disk1
    > 1: EFI EFI 314.6 MB disk1s1
    > 2: Apple_HFS SEAGATE_BU 2.0 TB disk1s2
    > /dev/disk2
    > #: TYPE NAME SIZE
    > IDENTIFIER
    > 0: GUID_partition_scheme *2.0 TB disk2
    > 1: EFI EFI 209.7 MB disk2s1
    > 2: Apple_HFS Seagate2TSL 1000.0 GB disk2s2
    > 3: Apple_HFS SeaGate2T 999.9 GB disk2s3
    > ```
* [Mac の ターミナルでディスクを unmount / mount する方法 - Qiita](https://qiita.com/earth55/items/88015f3499411e3eab51)