読み込みができないSDカードをなんとかして読み込む

# 更新(2025-0228)
少し前にもう一度、この記事に出てくるのと同じSDカードを読み込んだとき、特に何もしなかったんですよ。
そして数時間経った後、読み込み専用とはいえ読み込めたんですよ。
つまりこの記事でやったことあんまり意味なかったっていうこと...
なお、書き込みはできないし、SDカード消去もできませんでした。
中身完全にダメになってるタイプか...?

# TL;DR
1. いろいろ試したものを順に載せていくし, これを書く前にもいくつか試している。
しかしどれもうまく行ってないので、もう一度やらない限り書いてない。
2. 今回はマウントし、データをバックアップするのが目的なのでデータの削除等は行わない。
3. 翻訳は基本的に自分が翻訳しているのでミスあるかも。あったら指摘をお願いします。
4. 最後の方は頭が働いてない可能性があります。

# 環境
* OS: macOS Catalina 10.15.7 (19H2026)
* SDカード: SAMSUNG Evo Plus 128GB ([Amazonリンク](https://www.amazon.co.jp/dp/B0CY4GPMD6))
* デバイス: /dev/disk2
* ボリューム: UNTITLED (disk2s1)

# 試したこと
### diskutil list
```
$ diskutil list
...(一部省略)
/dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *128.2 GB   disk2
   1:                 DOS_FAT_32 UNTITLED                128.2 GB   disk2s1
```

## Disk Utility
### Info
* デバイス
```
Volume type : Physical Device
BSD device node : disk2
Connection : USB
Device tree path : IODeviceTree:/PCI0@0/XHC1@14
Writable : No
Is case-sensitive : No
Volume capacity : 128,177,930,240
Available space (Purgeable + Free) : 0
Purgeable space : 0
Free space : 0
Used space : 128,177,930,240
Owners enabled : No
Is encrypted : No
Can be verified : No
Can be repaired : No
Bootable : No
Journaled : No
Disk number : 2
Media name : APPLE SD Card Reader Media
Media type : Generic
Ejectable : Yes
Solid state : No
S.M.A.R.T. status : Not Supported
```
* UNTITLED
```
Volume name : UNTITLED
Volume type : Unknown
BSD device node : disk2s1
File system : MS-DOS (FAT32)
Connection : USB
Device tree path : IODeviceTree:/PCI0@0/XHC1@14
Writable : No
Is case-sensitive : No
File system UUID : 1ACA8A52-8033-3FFF-9D18-6E5660DFF2C3
Volume capacity : 128,161,153,024
Owners enabled : No
Is encrypted : No
Can be verified : Yes
Can be repaired : Yes
Bootable : No
Journaled : No
Disk number : 2
Partition number : 1
Media name : 
Media type : Generic
Ejectable : Yes
Solid state : No
S.M.A.R.T. status : Not Supported
Parent disks : disk2
```
### マウント
```
Could not mount “UNTITLED”.
(com.apple.DiskManagement.disenter error 0.)
```
Apple Community(1)より
> when repair takes a long time, it can indicate that a drive is accumulating errors, and may be dead soon.
(修復に時間がかかるなら, それはエラーが溜まりまくってるし, すぐお亡くなりになるだろう。)

えっ
いや、せめてデータ読ませろ...
### First Aid
* デバイス
```
Running First Aid on “APPLE SD Card Reader Media” (disk2)


Operation successful.
```
* UNTITLED
```
Running First Aid on “UNTITLED” (disk2s1)

Repairing file system.
Volume is already unmounted.
Performing fsck_msdos -y /dev/rdisk2s1
** /dev/rdisk2s1

** Phase 1 - Preparing FAT

** Phase 2 - Checking Directories

** Phase 3 - Checking for Orphan Clusters

14641 files, 79131392 KiB free (2472856 clusters)

File system check exit code is 0.
Restoring the original state found as unmounted.

Operation successful.
```
成功してるな。しかも特に問題なさそう。
何が問題なのだ? フォーマットがMS-DOS(FAT32)なのが問題なのか?
というかそれくらいしかなさそう。

## コマンドからマウント
```sh
$ sudo mkdir /Volumes/ExtMed
$ sudo mount -o nobrowse,rw -t msdos /dev/disk2 /Volumes/ExtMed/
mount_msdos: Unsupported sector size (0)
mount: /Volumes/ExtMed failed with 71
$ sudo mount -t msdos /dev/disk2s1 /Volumes/ExtMed/
mount_msdos: /dev/disk2s1 on /Volumes/ExtMed: Resource busy
mount: /Volumes/ExtMed failed with 71
```
Resource busy???
もしかしてこれ時間が経てばマウントされるか?
できればすぐマウントしてほしいのだが...
### 様々なフォーマットで試してみた
ところでmountコマンドはどういうフォーマットに対応しているのか, manで試してみる。
```
-t lfs | external type
             ...(省略)
             If the type is not one of the internally known types, mount will attempt to execute a program in /sbin/mount_XXX where XXX is replaced by the type name.  For example, nfs filesystems are mounted by the
             program /sbin/mount_nfs.
```
> もしそのフォーマットのタイプが内部的に知られているタイプのものでなかったら、mountは`/sbin/mount_XXX`(XXXはタイプの名前)のプログラムを実行しようとします。例として、nfsファイルシステムは`/sbin/mount_nfs`プログラムによってマウントされます。
```sh
$ ls /sbin/ | grep mount_
mount_9p*
mount_acfs@
mount_afp*
mount_apfs@
mount_cd9660@
mount_cddafs@
mount_devfs*
mount_exfat@
mount_fdesc*
mount_ftp@
mount_hfs@
mount_msdos@
mount_nfs*
mount_ntfs@
mount_smbfs*
mount_udf@
mount_webdav*
```
なるほど。
いろいろ試してみたが、明らかにタイプが違うよって言ってるようなエラーコード達だった。
```sh
$ sudo mount -t exfat /dev/disk2s1 /Volumes/ExtMed/
mount_exfat: /dev/disk2s1 on /Volumes/ExtMed: Invalid argument
mount: /Volumes/ExtMed failed with 71
$ sudo mount -t hfs /dev/disk2s1 /Volumes/ExtMed/
mount_hfs: error on mount(): error = -1.
mount_hfs: Invalid argument
mount: /Volumes/ExtMed failed with 1
$ sudo mount -t nfs /dev/disk2s1 /Volumes/ExtMed/
mount_nfs: could not parse file system specification
mount: /Volumes/ExtMed failed with 22
```

## diskutil
以下基本UNTITLED(disk2s1)メインでやってく。
### マウント
```
$ diskutil mount /dev/disk2s1
Volume on disk2s1 timed out waiting to mount
```
時間かあ...
### verifyVolume
```sh
$ diskutil verifyVolume disk2s1
Started file system verification on disk2s1 UNTITLED
Verifying file system
Volume is already unmounted
Performing fsck_msdos -n /dev/rdisk2s1
** /dev/rdisk2s1
** Phase 1 - Preparing FAT
** Phase 2 - Checking Directories
** Phase 3 - Checking for Orphan Clusters
14641 files, 79131392 KiB free (2472856 clusters)
File system check exit code is 0
Restoring the original state found as unmounted
Finished file system verification on disk2s1 UNTITLED
```
問題なさそう。FirstAidがそんな感じだったし、そりゃそうか。
### repairVolume
```sh
$ diskutil repairVolume disk2s1
Started file system repair on disk2s1 UNTITLED
Repairing file system
Volume is already unmounted
Performing fsck_msdos -y /dev/rdisk2s1
** /dev/rdisk2s1
** Phase 1 - Preparing FAT
** Phase 2 - Checking Directories
** Phase 3 - Checking for Orphan Clusters
14641 files, 79131392 KiB free (2472856 clusters)
File system check exit code is 0
Restoring the original state found as unmounted
Finished file system repair on disk2s1 UNTITLED
```
というかこれFirstAidと全く同じか。

## Windows10 (Windows on Mac, 外部HDDより)
フォーマットがMS-DOSならWindowsで読み込めば良いのでは?
しかし, 私の環境はWindows on Macだし, しかも外部HDDだからものすごく遅い。
その中でこんな不安定なSDカード使って良いのか不安である。
### 結果
マウントできた。中身があることも確認できた。
がしかし, エクスプローラーが頻繁に応答停止するので諦めた。
全部が遅い。当たり前だが, その前提だが。
(今までこのWindows on Macが役に立った回がないな...)
ここでいくつかのファイルを別のカードに移そうとしてまた応答停止を起こした。

## Windows11 (Parallels)
今のこのパソコンでは何もできないので借りて行う。
### 結果
まずWindows側にSDカードが行かない。
Mac側で読み込まれているのはわかったが, 何度も消えては戻る動作を繰り返している。
嫌な感じ。接触不良か? 何度マウントしようとしても途中で消える。
で, 安定してそうなタイミングでWindows側に入れようとしてもどこかで使用中...どこで?
諦めた。

## Windows11 (純正)
ネイティブWindows11を使う。
これも同様借りた。(本当に感謝。)
直接SDカードを挿入できる部分があるので使う。
### マウント
マウントはできた。がしかし内部まで到達できない。
途中で`SDカードを挿入してください。`と...
え, 途中で外されている? マジで?
そして時々`セキュリティで保護されたデバイス`と...
これ内部結構はちゃめちゃにされてないか? 問題大有りすぎる。
### 諸々チェック
easeusにあったコマンド(2)を, 公式リファレンス(3)を見てから試した。
```
> chkdsk D: /r /f /x
ファイルシステムの種類はRAWです。
RAWドライブにCHKDSKは使用できません。
```
RAWドライブ?
検索してみた。そこで見つけたbitwarのブログ(4)にこう書かれていた。
> まず第一に、CHKDSKはWindows XP、7、8、10などのWindowsのすべてのバージョンで見つかります。Windowsのこのエラーメッセージは、しばしば、以下のような理由で、破損したディスクや損傷したディスクのために表示されます。
\* ディスクまたはドライブの安全でない取り出し
\* アンチウイルスによる攻撃

うっ...
でもどう考えたって使ってなさそうなのに外そうとすると「このデバイスは現在使用中です。デバイスを使用しているプログラムまたはウィンドウを閉じてから、再試行してください。」って言ってくるのもどうかと思うんですよ。
### 永遠にできないエラーチェック
ここでUSBに変えてみる。意味ないけど。
デバイスのプロパティ: このデバイスは正常に動作しています。
ドライブのプロパティからのエラーチェック: ディスクにアクセスできないため、ディスクのチェックを実行できませんでした。
アクセスできない...?

## ふと思った
このSDカードFAT32じゃん。
んでFAT32は4GB以上入れられないじゃん。
でもそれを知らずに4GB以上のもの入れてたとするじゃん。
そうしたらどうなるんだ?
\* なおこの後問題ないことがわかる

## 解決
これで一瞬だった
```sh
$ diskutil mount readOnly /dev/disk2s1
```
私が3日ほどかけてデータどうにかしてみるぞって頑張ってたのが, めちゃくちゃ隣にいたこいつによって解決した。
ちなみに, 日を跨ぐ前からずっといろいろ試してて, そろそろ朝6時になろうとしているときである。
脳が焼ける。
まぁ, 何をすれば良いか, こういうときはどうすれば良いかとかを知れたんだし, よしとしよう。
あと[面白画像(Twitter)](https://x.com/ws_wsan/status/1829859942217760782)も撮れたし
[全く良しとできない問題(Twitter)](https://x.com/ws_wsan/status/1829988471353852369)もあるが...

# まとめ
多分これだけやればなんとかなるはずだというものをまとめる
1. Disk Utilityでデバイス, ボリュームをFirstAid
2. 問題なければ, Disk Utilityでマウント
3. 上ができなければ, コマンドでmount
4. 上が..., コマンドでdiskutilからマウント
5. 上..., readOnlyをつけてみる

# 参考文献
(1) USB External Drive Not Mounting?, Apple Community, 
    https://discussions.apple.com/thread/253930618?sortBy=rank (2024-08-31)
(2) 「SDカードが破損しました」場合のデータ救出, EaseUS,
    https://jp.easeus.com/storage-media-recovery/recover-corrupted-sd-card.html (2024-08-31)
(3) chkdsk, Microsoft,
    https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/chkdsk (2024-08-31)
(4) Windows「RAWドライブにCHKDSKは使用できません」エラーの解消法, bitwarのブログ
    https://ameblo.jp/bitwar/entry-12798507740.html