hiroの長い冒険日記

主にコンピュータ周辺の興味を持った内容を綴ります

Synology DS-218+ から取り外した HDD の中身を PC から確認する方法

当日記ではアフィリエイト広告を利用しています

Synology DS-218+ の HDD を 4TB から8TB に取り替えました。ホットスワップで取り替えましたがトラブルなく終了し、改めて DS-218+ を選択して良かったと感じています。外した HDD 3台の余生はこれから考えますが、今後のトラブルに備えて HDD の中身を Windows10 PC から取り出す方法を確立しておきたいと考えて、将来の自分のために手順を残しておきます。

元の HDD の構成

Synology DS-218+ の HDD を取り替えた際の記事はこちらです。

hiro20180901.hatenablog.com

この時に取り外した HDD は、

  1. WD Red 4TB 2台内蔵でミラーリング (SHR) btrfs
  2. Seagate IronWolf 4TB 1台で外付、Hyper Backup 使用 ext4

のように使用していました。

どちらの HDD も、3年間、問題なく動作してくれました。途中で (よくある) 掃除機の電源が必要で電源断…なんて事も数度ありましたが、再起動すればちゃんと使えていました。

btrfs も ext4 も、どちらの filesystem も Windows10 のみでは取り出せないのは分かっていますので、仮想マシンを使用して Linux で取り出します。

以下、1 の HDD を「HDD_A」、2 の HDD を「HDD_B」で表記します。

Synology DS218+ 内部の HDD の接続状態

Synology DS218+ 内部で、どのように HDD が接続されているか、簡単に調べてみました。Synology DS218+ の sshd を一時的に有効にして調べています。以下は、HDD を更新後の状態です。

root@NAS:~# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md3 : active raid1 sdb6[1] sda6[0]
      3906998912 blocks super 1.2 [2/2] [UU]

md2 : active raid1 sdb5[3] sda5[2]
      3902187456 blocks super 1.2 [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
      2097088 blocks [2/2] [UU]

md0 : active raid1 sdb1[1] sda1[0]
      2490176 blocks [2/2] [UU]

unused devices: <none>

mdadm で設定した RAID1 が md0 から md3 まで存在しています。md2 と md3 が実際の data が入っている領域でしょう。二つに分かれているのは、Hot Swap して容量を2倍にしている為に、増やした領域が sd[ab]6 になっていると思われます。

md2 と md3 は lvm2 を使用して、論理ボリュームを構成しています。

root@NAS:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/md2
  VG Name               vg1000
  PV Size               3.63 TiB / not usable 1.94 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              952682
  Free PE               0
  Allocated PE          952682
  PV UUID               V4H9tZ-P9fc-AMR7-Yici-duOc-Zfsz-hpCq54

  --- Physical volume ---
  PV Name               /dev/md3
  VG Name               vg1000
  PV Size               3.64 TiB / not usable 640.00 KiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              953857
  Free PE               0
  Allocated PE          953857
  PV UUID               ltB6zu-0nU9-pcte-TUCe-0lEG-Dg2O-IDDtvn

root@NAS:~# vgdisplay
  --- Volume group ---
  VG Name               vg1000
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               7.27 TiB
  PE Size               4.00 MiB
  Total PE              1906539
  Alloc PE / Size       1906539 / 7.27 TiB
  Free  PE / Size       0 / 0
  VG UUID               UHJl8V-8soh-fb5a-GBcZ-ePpO-3urG-6BUHsM

root@NAS:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg1000/lv
  LV Name                lv
  VG Name                vg1000
  LV UUID                xs9J1A-0UWv-bukC-hrSq-E4A6-YyaM-CXzIJJ
  LV Write Access        read/write
  LV Creation host, time ,
  LV Status              available
  # open                 1
  LV Size                7.27 TiB
  Current LE             1906539
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     512
  Block device           252:0

PV (Physical Volume) 2つ /dev/md2, /dev/md3 を VG (Volume Group) vg1000 で一纏めにして、LV (Logical Volume) lv で全体を使用するようにしています。

root@iw_home:~# mount
/dev/md0 on / type ext4 (rw,relatime,barrier,data=ordered)
…略…
/dev/mapper/vg1000-lv on /volume1 type btrfs (rw,relatime,synoacl,space_cache=v2,auto_reclaim_space,metadata_ratio=50,subvolid=257,subvol=/@syno)
…略…
/dev/sdq1 on /volumeUSB1/usbshare type ext4 (rw,relatime,nodelalloc,synoacl,data=ordered)

/dev/md0 が root filesystem、/dev/vg1000/lv が /volume1 に btrfs で mount、/dev/sdq1 が USB HDD で /volumeUSB1/usbshare に mount されている事が分かります。

USB HDD を使用できるか事前調査

HDD を USB で Windows10 に接続して仮想マシンで mount する計画です。まずは、USB 接続の HDD を仮想マシンで path through で接続できるかどうか、事前に調べてみました。

Windows Subsystem for Linux 2 (WSL2)

WSL2 は Windows Insider Program の Dev channel では USB HDD を mount できるようですが、21H2 の Windows10 ではまだできませんでした。

ohayoyogi.hatenablog.com

wsl コマンドの mount オプションがありません。こちらは WSL2 が更新されるまで待つしかありません。

以下妄想:

Microsoft は、Linux の機能を細分化して Windows に取り込むのを狙っているのかもしれませんね。GUI 対応で Linux にしかないアプリの取込、filesystem で btrfs 等の取込、等々。WSL に最適化された、より細分化された軽量仮想マシンが出てきたら、WindowsLinux の一部分をパーツとして使う事になるのかも。

Hyper-VVirtualbox

Hyper-VVirtualbox は、過去に path through 接続した SSDLinux を install した事がありました。

hiro20180901.hatenablog.com
hiro20180901.hatenablog.com

USB 接続ですので、Windows10 に接続した状態がどのように仮想マシンに見えるようになるか分かりませんが、path through 接続できる可能性は高いと思います。

Virtualbox では、以前に購入した Bluetooth ドングルが使えましたので、おそらく接続できるだろうと期待しています。VirtualboxBluetooth ドングルを使う方法については末尾におまけとして記載します。

仮想マシンの準備

Hyper-VVirtualbox の2種類の仮想マシンはイチから作成しました。どちらもそれほど時間を取らずに install できるのは便利です。

Hyper-V には Ubuntu 20.04.3 LTS を、Virtualbox には debian 11.2.0 をインストールしました。

distribution を別にした理由は、kernel の設定や USB の扱いに違いがあるだろうという推測から、distribution の違いを確認した方が良さそうだと考えたからです。(結局、これが当たってしまいましたが後述します)

それぞれの仮想マシンへの Linux の install 方法については、下記の過去記事を参照ください。

hiro20180901.hatenablog.com
hiro20180901.hatenablog.com

Hyper-V は第二世代(UEFI)で、VirtualboxUEFI 有効で内蔵SSD に path through で作成しました。

以下、install 時にちょっと躓いた箇所をメモとして残しておきます。

debian 一般ユーザーで sudo を使えるようにする

Ubuntu は install 直後から sudo が使えますが、debian では su で root に切り替える必要があります。debian でも sudo が使えるように、group 'sudo' に一般ユーザー username を追加します。

# adduser username sudo

Hyper-V + Ubuntu の解像度を変更する

Hyper-V + Ubuntu の画面解像度が設定から変更できませんでした。hyperv_vb (frame buffer) 起動時の解像度を変更する方法が簡単でした。

Hyper-VでUbuntuを動かす際の解像度設定 - Qiita

Virtualbox は Guest Additions CD image を入れたら変更できます。menu から 「デバイス」->「Guest Additions CD イメージの挿入」を選択します。debian だと CD は noexec でmount されて script が実行できないので、再 mount が必要でした。

$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             4044520       0   4044520   0% /dev
tmpfs             813496    1212    812284   1% /run
/dev/sda2      120983240 7409356 107382064   7% /
tmpfs            4067480       0   4067480   0% /dev/shm
tmpfs               5120       4      5116   1% /run/lock
/dev/sda1         523244    3484    519760   1% /boot/efi
tmpfs             813496     176    813320   1% /run/user/1000
/dev/sr0           59672   59672         0 100% /media/cdrom0
$ sudo mount -o remount,ro,exec /media/cdrom0
$ sudo /media/cdrom0/VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 6.1.30 Guest Additions for Linux........
VirtualBox Guest Additions installer
Removing installed version 6.1.30 of VirtualBox Guest Additions...
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel
modules.  This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: or
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all
VirtualBox Guest Additions: Kernel headers not found for target kernel
5.10.0-10-amd64. Please install them and execute
  /sbin/rcvboxadd setup
VirtualBox Guest Additions: Running kernel modules will not be replaced until
the system is restarted

仮想マシンを再起動すれば、画面の解像度が変更できるようになりました。

仮想マシンに Windows10 の ssh から接続する

実行内容をメモするのに便利なので、各仮想マシンに Windows10 から ssh で接続しました。それぞれの仮想マシンに openssh-server を install します。

$ sudo apt install openssh-server

Hyper-V 仮想マシンssh で接続する

Hyper-V は Default Swich (内部ネットワーク) を使用すれば、ホスト側から ssh で接続できました。

Hyper-V マネージャーの起動画面:
f:id:hiro20180901:20211225111149p:plain:w794
仮想マシンネットワークアダプタ:
f:id:hiro20180901:20211225111317p:plain:w541
仮想スイッチマネージャー:
f:id:hiro20180901:20211225111444p:plain:w541

PowerShell: (一部省略)

PS> ssh username@172.19.48.139
username@172.19.48.139's password:
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.11.0-43-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 updates can be applied immediately.

Your Hardware Enablement Stack (HWE) is supported until April 2025.
Last login: Sat Dec 25 11:16:44 2021 from 172.19.48.1
username@Virtual-Machine:~$

Windows10 は 192.168.x.x、Hyper-V 仮想マシンは 172.19.48.x と、ネットワークは別になっていますが routing がちゃんと設定されています。別の物理マシンがないので確認できませんが、Hyper-V 仮想マシンには Windows10 以外は接続できないハズです。外部から接続したい場合には、新しく外部ネットワークの switch を作って接続すれば、下記の Virtualbox と同様に使用できます。

Virtualbox 仮想マシンssh で接続する

Virtualbox 側は初期設定の NAT ではもちろんダメで、ブリッジアダプターをホスト側のアダプタに割り当てる必要がありました。

Virtualbox マネージャー:
f:id:hiro20180901:20211225183033p:plain:w631
仮想マシンネットワークアダプタ : 割り当てを「ブリッジアダプター」にして、名前をホスト側のネットワークアダプタを選択する。
f:id:hiro20180901:20211225183040p:plain:w709

PowerShell: (一部省略)

PS> ssh username@192.168.x.xx
username@192.168.x.xx's password:
Linux debian 5.10.0-10-amd64 #1 SMP Debian 5.10.84-1 (2021-12-08) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
Last login: Sat Dec 25 09:45:36 2021 from 192.168.0.13
username@debian:~$

ブリッジアダプターの場合には、ホスト側の Windows10 と同じネットワークに繋がっている状態になり、IP address も 192.168.x.xx で同一のネットワークになるので、同じ LAN に接続されている物理マシンからも見えるハズです。

ググると、Virtualbox では二つのネットワークアダプタを使って、片方を NAT、もう片方をホストオンリーに設定すれば、Hyper-V と同じような使い方ができるハズなのですが、debian + GNOME の環境では複数のネットワークアダプタを有効にできない (排他になる) ようなので、深く追求するのはやめておきました。

2022.01.01 追記 : CLI ですが有効に出来ました。
Windows10 の WSL2 と Hyper-V と Virtualbox を相互に通信できるようにする設定 - hiroの長い冒険日記

まとめ

以上までの設定が終われば、二つの仮想マシン

の両方が可能です。

WSL2 の ssh から各仮想マシンに接続しようとやってみましたが、どうしてもうまくいかず断念しました。素直に Windows10 標準の sshPowerShell から使用します。仮想マシン同士 (WSL2、Hyper-VVirtualbox) の通信をどのようにして確立させるかについては、別の機会に調べてみます。

2022.01.01 追記 : WSL2 と Hyper-VVirtualbox の各仮想マシン間で通信を確立できました。
Windows10 の WSL2 と Hyper-V と Virtualbox を相互に通信できるようにする設定 - hiroの長い冒険日記

USB HDD を仮想マシンに path through で接続する

Hyper-VVirtualbox も、どちらも USB HDD を仮想マシンに path through で接続できます。手順が若干異なりますので、一つずつ項目を分けて説明します。

USB HDD を Windows10 に接続する

先日購入した SATA -> USB 変換器を使用して、HDD を Windows10 に USB で接続します。

Windows10 のディスクの管理(ハードディスク パーティションの作成とフォーマット)からは下の画面のように認識されます。

HDD_A (内蔵されていたHDD):
f:id:hiro20180901:20211225200428p:plain:w566

  • ディスク5が USB で接続した HDD_A になります。
  • パーティションが3つに分かれていて、恐らくですが root と swap とメイン領域に分かれていると思います。
  • 今回は root や swap には必要な data は入っていないので、ディスク5のパーティション3に注目して作業すれば良いと思います。

HDD_B (外付HDD) :
f:id:hiro20180901:20211225200625p:plain:w565

  • ディスク5 が USB で接続した HDD_B になります。
  • パーティションは一つのみです。

どちらも「ディスクの管理」から操作できる状態になりました。

USB HDD を仮想マシンから使用する【Hyper-V編】

Hyper-V 仮想マシンから USB HDD を使用するには、

  1. HDD を「オンライン」から「オフライン」に変更する。
  2. Hyper-V 仮想マシンへ HDD を接続する。
  3. Hyper-V 仮想マシンで、どの device として認識されたか調べる。

という流れになります。Hyper-V は該当 HDD をオフラインにすれば path through 接続可能になります。

以下、HDD_B を使用した手順を示します。

HDD をオフラインにする

下部の ディスク5のオンライン部分を右クリックして、メニューから「オフライン」を選択します。
f:id:hiro20180901:20211225202926p:plain:w565
そうすると表示が「オフライン」に変わります。
f:id:hiro20180901:20211225203137p:plain:w565

これで、ディスク5は Windows10 の管理下から外れました。

Hyper-V 仮想マシンへ HDD を接続する

次に、オフラインにしたディスク5を Hyper-V 仮想マシンに接続します。仮想マシンの設定から、SCSI コントローラー(第2世代の場合)を選択、ハードドライブを追加します。
f:id:hiro20180901:20211225204429p:plain:w541
追加されたハードドライブを選択し、物理ハードディスクの中からオフラインにしたディスク5を選択し、適用します。
f:id:hiro20180901:20211225204610p:plain:w541

これで、仮想マシンに USB HDD が path through 接続されました。

Hyper-V 仮想マシンで認識された device の調べ方

最近の GNOME では、ext4iso9660 等の Filesystem の場合は、認識されただけで mount までしてくれて、「ファイル」アプリから参照出来たりして便利です。

念の為、どの device として認識されたかどうかを調べておきます。

$ sudo dmesg | lv
…略…
[35823.953784] sd 0:0:0:2: [sdb] Synchronizing SCSI cache
[35823.955373] sd 0:0:0:2: [sdb] Synchronize Cache(10) failed: Result: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK
[35878.056397] scsi 0:0:0:2: Direct-Access     Asm      225              0    PQ: 0 ANSI: 6
[35878.059500] sd 0:0:0:2: Attached scsi generic sg2 type 0
[35878.060460] sd 0:0:0:2: [sdb] 7814037168 512-byte logical blocks: (4.00 TB/3.64 TiB)
[35878.060463] sd 0:0:0:2: [sdb] 4096-byte physical blocks
[35878.060768] sd 0:0:0:2: [sdb] Write Protect is off
[35878.060771] sd 0:0:0:2: [sdb] Mode Sense: 0f 00 00 00
[35878.061440] sd 0:0:0:2: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[35878.061443] sd 0:0:0:2: [sdb] Optimal transfer size 33553920 bytes not a multiple of physical block size (4096 bytes)
[35878.068395]  sdb: sdb1
[35878.094571] sd 0:0:0:2: [sdb] Attached SCSI disk
[35888.235827] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
…略…

今の環境では /dev/sdb として認識したようです。HDD_A の場合には複数のパーティションがあります。HDD_B の場合は sdb1 のみです。

ここまでくれば、後は Hyper-V 仮想マシンLinux で扱えます。

USB HDD を仮想マシンから使用する【Virtualbox編】

Virtualbox は USB に関しては Hyper-V よりも簡単で、USB 機器の接続を物理マシンから仮想マシンに切り替えるだけで認識できます。

Windows10 ディスクの管理はオフラインにする必要はなく、そのままで OK です。メニューの USB から該当ディスクを Virtualbox に接続すると、ディスクの管理から見えなくなります。代わりに、Virtualbox 側から見えるようになります。

HDD_A を使用して手順を説明します。

USB に HDD_A を接続した直後のディスクの管理 (ハードディスク パーティションの作成とフォーマット)の画面です。ディスク5 はオンラインで、パーティションが3つ存在しています。

f:id:hiro20180901:20211225200428p:plain:w566

Virtualbox (debian + GNOME) のメニューから、デバイス -> USB -> Asm 225 (これが HDD_A) を選択します。これだけで、USB HDD が Virtualbox に接続されます。

f:id:hiro20180901:20211226180603p:plain:w801

Virtualbox に USB HDD を接続すると、ディスクの管理からはディスク5が見えなくなります。

f:id:hiro20180901:20211226180808p:plain:w565

HDD_A はパーティションが3つありますので、/dev/sdb1、/dev/sdb2、/dev/sdb5 の3つが認識されています。

$ sudo dmesg | lv
…略…
[ 6691.637760] usb 2-1: new SuperSpeed Gen 1 USB device number 4 using xhci_hcd
[ 6691.660672] usb 2-1: New USB device found, idVendor=174c, idProduct=1153, bcdDevice= 0.00
[ 6691.660675] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=1
[ 6691.660676] usb 2-1: Product: 225
[ 6691.660676] usb 2-1: Manufacturer: Asm
[ 6691.660677] usb 2-1: SerialNumber: 12345678960D
[ 6691.667661] usb 2-1: USB controller 0000:00:0c.0 does not support streams, which are required by the UAS driver.
[ 6691.667663] usb 2-1: Please try an other USB controller if you wish to use UAS.
[ 6691.667664] usb-storage 2-1:1.0: USB Mass Storage device detected
[ 6691.668782] scsi host3: usb-storage 2-1:1.0
[ 6692.701494] scsi 3:0:0:0: Direct-Access     Asm      225              0    PQ: 0 ANSI: 6
[ 6692.702794] sd 3:0:0:0: Attached scsi generic sg2 type 0
[ 6692.705028] sd 3:0:0:0: [sdb] Very big device. Trying to use READ CAPACITY(16).
[ 6692.706377] sd 3:0:0:0: [sdb] 7814037168 512-byte logical blocks: (4.00 TB/3.64 TiB)
[ 6692.706379] sd 3:0:0:0: [sdb] 4096-byte physical blocks
[ 6692.709247] sd 3:0:0:0: [sdb] Write Protect is off
[ 6692.709248] sd 3:0:0:0: [sdb] Mode Sense: 43 00 00 00
[ 6692.712940] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 6692.799855]  sdb: sdb1 sdb2 sdb5
[ 6692.832228] sd 3:0:0:0: [sdb] Attached SCSI disk
[ 6693.123393] md/raid1:md2: active with 1 out of 2 mirrors
[ 6693.123403] md2: detected capacity change from 0 to 3995839954944
…略…

ここまでくれば、後は Virtualbox 仮想マシンLinux で扱えます。

まとめ

Hyper-VVirtualbox も、どちらも path through で HDD_A、HDD_B を接続する事ができました。後は接続した HDD をどのようにして扱うかになります。

Synology DS218+ から取り外した HDD のデータを取り出す方法

ここからが今回のメインテーマです。内蔵していた HDD_A と USB で外付していた HDD_B に分けて説明します。

HDD_A (内蔵されていたHDD) の認識方法 【debian 11 編】

HDD_A の場合は Linux で認識できるようになってから、もう一手間必要です。Linux の mdadm と lvm2 を使用することで認識できます。

大まかな手順としては以下の通りです。

  1. 必要な software を入れる (mdadm, lvm2)
  2. mount する

これで見えるようになります。debian 11 では mdadm と lvm2 の設定は自動的に行われるので、mount するだけです。

必要な software の install

mdadm と lvm2 を install します。

$ sudo apt install mdadm lvm2

mount する

$ sudo mount /dev/vg1000/lv /mnt
$ mount | grep vg1000
/dev/mapper/vg1000-lv on /mnt type btrfs (rw,relatime,space_cache=v2,subvolid=257,subvol=/@syno)
$ ls /mnt
ls: cannot access '/mnt/@img_bkp_cache': Input/output error
ls: cannot access '/mnt/@sharesnap': Input/output error
ls: cannot access '/mnt/docker': Input/output error
ls: cannot access '/mnt/ActiveBackupforBusiness': Input/output error
@ActiveBackup                @appstore                 @eaDir                    @synoelasticd.core       music
@S2S                         @autoupdate               @img_bkp_cache            @synologydrive           photo
@SynoFinder-etc-volume       @builtin-dyn-myd.core.gz  @pkg-SynologyMom.core.gz  @synoreport.core         video
@SynoFinder-log              @cloudsync                @secret@                  @tmp
@SynologyApplicationService  @database                 @sharesnap                ActiveBackupforBusiness
@SynologyDriveShareSync      @docker                   @synoaic_debug_d.core.gz  docker
@USBCopy                     @download                 @synoaic_monitor.core.gz  homes

一部読み取る事のできない folder はありますが、homes や photo、video 等は読み込む事ができますので、非常時のデータの復旧には十分かと思います。

取り外し方

umount して、LV を inactivate、md を stop してから USB を取り外します。

$ sudo umount /mnt
$ sudo vgchange -an
  0 logical volume(s) in volume group "vg1000" now active
$ sudo mdadm --stop /dev/md2
mdadm: stopped /dev/md2
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices: <none>

cat /proc/mdstat から表示が消えたら USB HDD を切り離してOKです。

手動で raid の構築、有効化 (参考)

debian11 では自動で raid が構築されますが、手動で実行する場合には、取り外しの逆の手順を実行します。

$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices: <none>
$ sudo mdadm --assemble /dev/md2 /dev/sdb5
mdadm: /dev/md2 has been started with 1 drive (out of 2).
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md2 : active (auto-read-only) raid1 sdb5[1]
      3902187456 blocks super 1.2 [2/1] [_U]

unused devices: <none>
$ sudo lvscan
  inactive          '/dev/vg1000/lv' [3.63 TiB] inherit
# ACTIVE なら次行は行う必要ありません
$ sudo vgchange -ay
  1 logical volume(s) in volume group "vg1000" now active
$ sudo lvscan
  ACTIVE            '/dev/vg1000/lv' [3.63 TiB] inherit
$ sudo mount /dev/vg1000/lv /mnt

HDD_A (内蔵されていたHDD) の認識方法【Ubuntu編、失敗 -> 成功】

残念ながら、Hyper-V でも Virtualbox でも、Ubuntu では前記の debian11 と同じ方法では認識できませんでした。Ubuntu 21.10 や、更に Fedora35 でも試してみましたが認識できません。今の所、認識できたのは debian11 だけです。

原因を探してみましたが、結局分かりません。違いを探してみると、mdadm で raid1 を assemble する段階で認識している容量が異なります。

debian 11 の場合 :

$ uname -a
Linux debian 5.10.0-10-amd64 #1 SMP Debian 5.10.84-1 (2021-12-08) x86_64 GNU/Linux
$ sudo dmesg | grep md
[ 7376.477479] md/raid1:md2: active with 1 out of 2 mirrors
[ 7376.477491] md2: detected capacity change from 0 to 3995839954944

Ubuntu の場合 :

$ uname -a
Linux vbUbuntu 5.13.0-22-generic #22-Ubuntu SMP Fri Nov 5 13:21:36 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ sudo dmesg | grep md
[ 9118.096737] md/raid1:md127: active with 1 out of 2 mirrors
[ 9118.096761] md127: detected capacity change from 0 to 7804374912

mdadm の source の Assemble.c に当たっているパッチが違うかと思い確認しましたが、Ubuntu でも同じでした。という事で、原因追及は断念しました。(kernel module の方かもしれません)

2022.01.02 追記:
ro で mount すればよかったようです。
Synology NASが故障したときにPCでデータを復元する方法 - Synology ナレッジセンター

$ sudo mount /dev/vg1000/lv /mnt -o ro

これでちゃんと mount できました。

まとめ

結果として、HDD_A は

  • mdadm、lvm2 を install する
  • debian 11 では path through で HDD を接続すると、raid と lvm2 の設定は自動で行われる。後は mount するだけ。一部読み取れない folder があるので、手動で mount する必要あり。
  • Ubuntu (20.04.3 LTS、21.10) や Fedora 35 では mount できなかった。mdadm で raid を構成する際に認識する容量に違いがあるので、これが原因と考えられるが追及できなかった。
  • 2022.01.02 追記 Ubuntu (20.04.3 LTS、21.10) でも mount に ro option を付ける事で mount できました。

という事で、debian 11 でも Ubuntu でも中身を読み取る事ができました。

HDD_B (外付HDD) の認識方法

全領域が一つの ext4 になっている HDD_B は、Hyper-V/Virtualboxdebian/Ubuntu のどちらでも読み取る事ができました。差し込むだけで認識できます。

以下、Virtualbox + debian で説明しますが、Hyper-V + Ubuntu でも USB HDD の接続方法以外は同様です。

接続直後の状態

/dev/sdb1 として認識されて、/media 以下に mount までされています。

mount :

$ mount | grep sdb
/dev/sdb1 on /media/username/1.42.6-23824 type ext4 (rw,nosuid,nodev,relatime,errors=remount-ro,uhelper=udisks2)

dmesg :

$ sudo dmesg | lv
…略…
[   35.276750] usb 2-1: new SuperSpeed Gen 1 USB device number 2 using xhci_hcd
[   35.307157] usb 2-1: New USB device found, idVendor=174c, idProduct=1153, bcdDevice= 0.00
[   35.307159] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=1
[   35.307160] usb 2-1: Product: 225
[   35.307161] usb 2-1: Manufacturer: Asm
[   35.307161] usb 2-1: SerialNumber: 12345678960D
[   35.368857] usb 2-1: USB controller 0000:00:0c.0 does not support streams, which are required by the UAS driver.
[   35.368859] usb 2-1: Please try an other USB controller if you wish to use UAS.
[   35.368860] usb-storage 2-1:1.0: USB Mass Storage device detected
[   35.373027] scsi host3: usb-storage 2-1:1.0
[   35.374295] usbcore: registered new interface driver usb-storage
[   35.388613] usbcore: registered new interface driver uas
[   36.381113] scsi 3:0:0:0: Direct-Access     Asm      225              0    PQ: 0 ANSI: 6
[   36.381626] sd 3:0:0:0: Attached scsi generic sg2 type 0
[   36.386148] sd 3:0:0:0: [sdb] Very big device. Trying to use READ CAPACITY(16).
[   36.387609] sd 3:0:0:0: [sdb] 7814037168 512-byte logical blocks: (4.00 TB/3.64 TiB)
[   36.387610] sd 3:0:0:0: [sdb] 4096-byte physical blocks
[   36.391273] sd 3:0:0:0: [sdb] Write Protect is off
[   36.391276] sd 3:0:0:0: [sdb] Mode Sense: 43 00 00 00
[   36.394039] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[   36.444102]  sdb: sdb1
[   36.668652] sd 3:0:0:0: [sdb] Attached SCSI disk
[   37.173131] EXT4-fs (sdb1): recovery complete
[   37.196257] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: errors=remount-ro
…略…

中身を gnome のファイルアプリで見たのが下の画面です。

mount した directory 直下: 拡張子hbk の folder が、Hyper Backup で backup された data 一式が入っている  folder です。私の場合は2種類あります。
f:id:hiro20180901:20211231190657p:plain:w641

NNNNN.hbk folder の中 : 拡張子 bkpi の file が backup の内容が記録されている file です。
f:id:hiro20180901:20211231190730p:plain:w641

この状態では、Hyper Backup で backup されたままの状態ですので、中身を確認する事は出来ません。

Synology Hyper Backup ExplorerLinux 版を使用して中身を確認する

そこで、Hyper Backup ExplorerLinux 版を使用して、中身を取り出します。

www.synology.com

仮想マシンの中で Web Browser を起動し上記サイトを開きます。ダウンロードセンターから製品カテゴリ「NAS」と製品名「DS218+」を選択して、デスクトップユーティリティーの中から Hyper Backup Explorer の「ダウンロード」を選択し、Ubuntu & Fedora 用を選択すると、圧縮された file が download されます。

このファイルを展開して、中に含まれている HyperBackupExplorer を実行します。展開は gnomeアーカイブマネージャーを使用しても良いですし、コマンドラインで実行するなら以下の方法です。

$ mkdir hbe
$ cd hbe/
$ tar xf ../ダウンロード/HyperBackupExplorer-3.0.0-0149-linux.tar.bz2 .
$ ./HyperBackupExplorer

Hyper Backup Explorer の起動画面 : 左側のローカルバックアップを閲覧を選択します。
f:id:hiro20180901:20211231191133p:plain:w641

拡張子 bkpi のファイルを選択します。
f:id:hiro20180901:20211231191233p:plain:w641

実際に backup されている folder が表示されます。下部の矢印や左下のカレンダーから、backup された日付を選択する事も出来ます。
f:id:hiro20180901:20211231191254p:plain:w641

folder や file を選択して右クリックすると、指定した folder に copy されます。
f:id:hiro20180901:20211231191525p:plain:w641

このようにして、Hyper Backup Explorer を使用すれば、世代管理された backup data から必要な file/folder を取り出す事ができます。

まとめ

ここまでの手順で、HDD_B の Hyper Backup Explorer のデータを、仮想マシン内で file や folder を取り出す事ができるようになりました。内蔵の HDD_A と比較してハードルは低く、backup されていれば読み取れない data も無いので、作業しやすいかと思います。

Windows10 の Hyper Backup Explorer からデータを抜き出すには

できれば Windows10 から Hyper Backup の data を取り出せれば、もっと簡単に済ませられると思います。

詳細な手順は省きますが、以下のやり方で Windows10 の Hyper Backup Explorer からデータを抜き出せました。

  • 仮想マシン側に samba を install する
  • /etc/samba/smb.conf を編集する。最後に以下を追加。

[share]
path = /media
writeable = no
guest ok = no
guest only = no

  • /media を chmod 755 に変更する
  • samba を再起動
  • Windows10 の Hyper Backup Explorer を起動する
  • ローカルバックアップの選択で "\\192.168.x.xx\" と仮想マシンの IP address を指定する
  • "share" フォルダが見つかったら、中から拡張子 bkpi のファイルを選択する。

これ以降は Linux 版の説明と同じです。

おまけ : Virtualbox でホスト側Windows10 に接続した Bluetooth ドングルを使用する

以前に Windows10 用に Bluetooth USB ドングルを購入しました。
hiro20180901.hatenablog.com

この時に Amazon リンク切れとなっていた商品が復活していました。

この Bluetooth USB ドングルは、Realtek chip を採用していて、Linux でも稼働実績があるのが特徴です。

この Bluetooth USB ドングルを、 Virtualbox で使ってみました。

先ずは、Windows10 のデバイスマネージャーで、ベンダーID、プロダクトID、リビジョンを調べます。

f:id:hiro20180901:20211231211332p:plain:w349

ベンダーID プロダクトID リビジョン
08DA 8771 0200

次に、Virtualbox のデバイスメニューの USB からデバイスにカーソルを合わせると、ベンダーID 等が表示されるので、その項目を選択します。

f:id:hiro20180901:20211231212056p:plain:w640

認識されると、dmesg に記録が出力されます。
dmesg :

[15628.427509] usb 1-2: new full-speed USB device number 3 using xhci_hcd
[15628.799220] usb 1-2: New USB device found, idVendor=0bda, idProduct=8771, bcdDevice= 2.00
[15628.799222] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[15628.799223] usb 1-2: Product: Bluetooth Radio
[15628.799224] usb 1-2: Manufacturer: Realtek
[15628.799224] usb 1-2: SerialNumber: 00E04C239987
[15628.847670] cryptd: max_cpu_qlen set to 1000
[15628.944040] alg: No test for fips(ansi_cprng) (fips_ansi_cprng)
[15629.012782] Bluetooth: Core ver 2.22
[15629.012860] NET: Registered protocol family 31
[15629.012861] Bluetooth: HCI device and connection manager initialized
[15629.012864] Bluetooth: HCI socket layer initialized
[15629.012866] Bluetooth: L2CAP socket layer initialized
[15629.012869] Bluetooth: SCO socket layer initialized
[15629.030776] usbcore: registered new interface driver btusb
[15629.034827] Bluetooth: hci0: RTL: examining hci_ver=09 hci_rev=d899 lmp_ver=09 lmp_subver=64cd
[15629.034829] Bluetooth: hci0: RTL: unknown IC info, lmp subver 64cd, hci rev d899, hci ver 0009
[15629.034830] Bluetooth: hci0: RTL: assuming no firmware upload needed
[15629.101707] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[15629.101709] Bluetooth: BNEP filters: protocol multicast
[15629.101712] Bluetooth: BNEP socket layer initialized
[15629.162735] NET: Registered protocol family 38
[15629.201226] Bluetooth: RFCOMM TTY layer initialized
[15629.201230] Bluetooth: RFCOMM socket layer initialized
[15629.201234] Bluetooth: RFCOMM ver 1.11

gnome の設定 -> Bluetooth から、Bluetooth keyboard が接続でき、入力できる事を確認しました。

総まとめ

  • Synology DS218+ に USB HDD を外付で接続する時に exFATNTFS を選ぶ方も多いかと思いますが、Linux の filesystem (btrfs や ext4) を選んでも、それなりの知識があれば苦労なくデータを復旧する事ができました。Synology DS218+ の中では Linux が動作しており、Linux の filesystem を選択した方が個人的には素直な使い方ではないかと思います。
  • Hyper-VVirtualbox を比較すると、ディスクの管理から該当 HDD をオフラインにしなくても良い分、Virtualbox の方が簡単かと感じました。また、HDD 以外の USB 機器も (今回は Bluetooth ドングルを試しましたが) Linux 側が対応していれば使える可能性があります。実機と同じように USB 機器を試す場合には、Virtualbox の方が合っています。
  • とはいえ、Hyper-V でも path through 接続した HDD は安定して扱えますので、使い方次第だと思います。
  • debian 11 のみ、不完全ではありますが、内蔵の HDD_A の中身を見る事ができました。Ubuntu や追加で試した Fedora が読み込めなかった理由は不明です。何となく kernel (module?) が原因かなとは思っていますが、Synology DS218+ から取り外した HDD は debian 11 で読み込めるという事が分かったのは収穫でした。
  • 2022.01.02 追記 Ubuntu でも mount に ro option を追加する事で読み込めました。
  • 今回の調査で強く感じたのは、Hyper Backup でどこまで backup しておくか、という事です。内蔵の HDD は、debian 11 で読み込めたものの、一部読み込めない部分があり、完全ではありませんでした。Hyper Backup 側では読み込めない箇所はなく、世代管理もされていて過去に遡って取り出す事も可能ですので、必要なすべてのデータを Hyper Backup で記録しておく必要があると感じました。

以上、長くなりましたが、参考になれば幸いです。今回、課題として残った項目につきましては、時間を見つけて後日検証したいと考えています。

2022.01.02 追記 :
検証結果はこの日記に追記しました。

2022.01.01 追記 :

について、別の日記にまとめました。
hiro20180901.hatenablog.com