下のような RAID1 相当のミラー。

# camcontrol devlist
<TOSHIBA MD05ACA800 GX0B>          at scbus0 target 0 lun 0 (pass0,ada0)
<ST8000DM004-2CX188 0001>          at scbus1 target 0 lun 0 (pass1,ada1)

# zpool status
  pool: zpool1
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sat Sep 21 13:23:42 2019
        447G scanned at 0/s, 41.9M issued at 0/s, 6.94T total
        26.4M resilvered, 0.00% done, no estimated completion time
config:

        NAME                            STATE     READ WRITE CKSUM
        zpool1                          ONLINE       0     0     0
          mirror-0                      ONLINE       0     0     0
            diskid/DISK-A               ONLINE       0     0     0
            diskid/DISK-B               ONLINE       0     0    11

片肺になったので DISK-B のHDDを新調して換装して zpool online zpool1 diskid/DISK-B した。

resilver 前は smartctl -a /dev/ada0(DISK-A) したのだけれど、異常は無かった。
その後 resilver 中に何度もリブートしてしまう。
今一度 smartctl してみると DISK-A のほうにもエラーが記録されていました。。。
定期的な scrub はしていませんでした。

これではいつまでたっても復旧できないので ddrescue してみることに。

$ zfs export zpool1
$ time ddrescue --force /dev/ada0 /dev/ada1
GNU ddrescue 1.24
Press Ctrl-C to interrupt
    ipos:    5453 GB, non-trimmed:    65536 B,  current rate:    141 MB/s
    opos:    5453 GB, non-scraped:        0 B,  average rate:    169 MB/s
non-tried:    2547 GB,  bad-sector:        0 B,    error rate:       0 B/s
  rescued:    5453 GB,   bad areas:        0,        run time:  8h 57m 49s
pct rescued:   68.15%, read errors:        1,  remaining time:      5h 15m
                              time since last successful read:          0s
Copying non-tried blocks... Pass 1 (forwards)
    ipos:    5284 GB, non-trimmed:        0 B,  current rate:       0 B/s
    opos:    5284 GB, non-scraped:        0 B,  average rate:    145 MB/s
non-tried:        0 B,  bad-sector:     4096 B,    error rate:      32 B/s
  rescued:    8001 GB,   bad areas:        1,        run time: 15h 18m 32s
pct rescued:   99.99%, read errors:        9,  remaining time:         n/a
                              time since last successful read:      1m 37s
Finished
ddrescue --force /dev/ada0 /dev/ada1  140.37s user 811.88s system 1% cpu 15:18:33.03 total
$ reboot # 念のため /dev/ada0 を外す
$ zpool import
  pool: zpool1
    id: 111111111111111111
  state: DEGRADED
status: One or more devices were being resilvered.
action: The pool can be imported despite missing or damaged devices.  The
        fault tolerance of the pool may be compromised if imported.
config:

        zpool1                      DEGRADED
          mirror-0                  DEGRADED
            diskid/DISK-B           ONLINE
            12312312312312312312    OFFLINE
$ zpool import zpool1

僅かに read errors は出てますが、無事に新しいHDDに移せました。
まだ片肺ではありますが。

いつも思うのですが シーケンシャルリード 偉大です。

p.s. 2年前の同時期に購入した MD05ACA800 6台中3台が同時期に壊れました。。。
2台は上、もう1台は全く別環境なのですが。。。

こちらの通りで動きました。感謝!
http://april.fool.jp/blogs/2019/05/12/freebsd-12のbhyveにwindows10をインストールする:その2(vm-bhyve使用)/

確かに disk0_type="ahci-hd" だとディスクが遅いかも。

disk0_type="virtio-blk" は 12.0-RELEASE だと下のパッチを usr.sbin/bhyve にあてる必要があった。
(12.1-RELEASE には取り込まているようです)
https://forums.freebsd.org/threads/bhyve-windows-server-slow-io.71199/#post-430626

% svnlite checkout https://svn.FreeBSD.org/base/releng/12.0 /usr/src
% cd /usr/src
% patch -p1 < ~/bhyve.patch
% cd usr.sbin/bhyve
% make
% make install # /usr/sbin/bhyve が置き換わるのみです

# 12.0-RELEASE-p7
% ls -al /usr/sbin/bhyve
-r-xr-xr-x  1 root  wheel  491448  7月 23 06:42 /usr/sbin/bhyve
% sha256 /usr/sbin/bhyve
SHA256 (/usr/sbin/bhyve) = 02d50329025220fcf7818f356d57bc4b858b92d067bdf1abc6ff8a12f77d040a

# 置き換わった後
% ls -al /usr/sbin/bhyve
-r-xr-xr-x  1 root  wheel  495552  9月 22 01:42 /usr/sbin/bhyve
% sha256 /usr/sbin/bhyve
SHA256 (/usr/sbin/bhyve) = c41599301e77b1db7776f5917e1fb3c10fcf919c910182ab9d255f4db64f712c

Windows 側には fedora の driver の viostor/ をいれた。

vm configure win10 はこんなん。

loader="uefi"
cpu=4
cpu_sockets=2
cpu_cores=2
cpu_threads=1
memory=4G

#network0_type="e1000"
network0_type="virtio-net"
network0_switch="public"
#disk0_type="ahci-hd"
disk0_type="virtio-blk"
disk0_name="disk0.img"
#disk1_type="virtio-blk"
#disk1_name="disk1.img"
uuid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

graphics="yes"
#graphics="no"
#graphics_wait="yes"
graphics_res="1280x1024"
utctime="no"
xhci_mouse="yes"

# vm install win10 ~/Downloads/virtio-win-0.1.172.iso
network0_mac="xx:xx:xx:xx:xx:xx"

# vncviewer 192.168.13.1:5900

xfreerdp で繋げて Youtube が見れることを確認しました。

おまけ
上のページのbhyveのパッチ(ハードタブに置き換えたの)
パッチが当たっているコンパイル済みの /usr/sbin/bhyve のバイナリ

https://www.mkamimura.com/2019/08/Perl-Directory-Manipulation-Move-directory-chdir-glob-angle-brackets-home-directory.html
ごもっともだと思います。

Wide character in print at と日本語ファイル名が文字化けする2点を修正したものです。

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;
use v5.18;
use Cwd;
use Encode;

use Encode::Locale;
binmode STDOUT, ':encoding(console_out)';

if ($^O eq 'darwin') {
    require Encode::UTF8Mac;
    $Encode::Locale::ENCODING_LOCALE_FS = 'utf-8-mac';
}

say '1.';

print "ディレクトリ名を入力: ";
chomp(my $dir = <STDIN>);

if ($dir =~/^\s*$/) {
    chdir or die "cannot chdir to home directory: $!";
} else {
    chdir $dir or die "cannot chdir to $dir: $!";
}

say 'The current working directory is ', getcwd();

for (sort <*>) {
    say decode locale_fs => $_;
}
# diff -u mason/note/2019/09/a-code-orig.pl mason/note/2019/09/a-code.pl
--- mason/note/2019/09/a-code-orig.pl   2019-09-04 13:55:07.145300000 +0900
+++ mason/note/2019/09/a-code.pl        2019-09-04 13:59:05.276605000 +0900
@@ -1,10 +1,20 @@
 #!/usr/bin/env perl
+
 use strict;
 use warnings;
 use utf8;
 use v5.18;
 use Cwd;
+use Encode;

+use Encode::Locale;
+binmode STDOUT, ':encoding(console_out)';
+
+if ($^O eq 'darwin') {
+    require Encode::UTF8Mac;
+    $Encode::Locale::ENCODING_LOCALE_FS = 'utf-8-mac';
+}
+
 say '1.';

 print "ディレクトリ名を入力: ";
@@ -19,5 +29,5 @@
 say 'The current working directory is ', getcwd();

 for (sort <*>) {
-    say $_;
+    say decode locale_fs => $_;
 }

Windows や Mac での下記は、整っていないと言わざるをえないと思います。

https://rt.perl.org/Public/Bug/Display.html?id=134286
- command line arguments
- filenames across many different operators
- process creation (system, exec, readpipe/qx(), pipe open())
- environment variables
- console (maybe)
- many similar changes in bundled modules

Perl5流のバイト列に拘るにしても、整備する必要を感じます。

ここが問題で、ファイル名を渡す・操作する・返す形のモジュールにおいて、ASCIIのファイル名を扱う限り問題が起きませんが
日本語を含むと問題が起きるので、そのモジュールの使用を躊躇えざるをえません。

File::FindFile::Find::Rule などのちょっとしたこを簡単にこなせるPerl5らしいモジュールがありますが、ASCII以外だと躊躇います。
https://randomgeekery.org/2019/06/01/weighing-files-with-python/

書き捨ての簡単なファイル操作を行うスクリプトにおいても ASCII 外では perl5 では、分かっていても面倒だと思います。
(Linux などを UTF-8 で運用していたり、Windows のベータ機能 CP_UTF8 では問題ないのですが)

perl adv
perl adv