RaidZのファイルサーバーを再構築した。
経緯
最近RaidZで構築したファイルサーバーで、読み込みがとても遅くなるようになりました。
35,000弱のファイルがあるフォルダをWindowsのエクスプローラーで開いたら、
5分くらいフリーズしちゃう状況です。
フリーズ中にiotopでプロセスを確認するとsambaがI/Oを99%使っている状態で
sambaをリスタートすると改善することがある。
待てばいいとはいえなんかおかしい。
と思ったのでdmesg出力してみたら以下のエラーが発生していました。
[水 5月 5 09:46:07 2021] ata4.00: exception Emask 0x0 SAct 0x70001eb6 SErr 0x0 action 0x0
[水 5月 5 09:46:07 2021] ata4.00: irq_stat 0x40000008
[水 5月 5 09:46:07 2021] ata4.00: failed command: READ FPDMA QUEUED
[水 5月 5 09:46:07 2021] ata4.00: cmd 60/00:10:78:62:b1/01:00:68:00:00/40 tag 2 ncq 131072 in
res 41/40:00:60:63:b1/00:01:68:00:00/00 Emask 0x409 (media error) <F>
[水 5月 5 09:46:07 2021] ata4.00: status: { DRDY ERR }
[水 5月 5 09:46:07 2021] ata4.00: error: { UNC }
[水 5月 5 09:46:07 2021] ata4.00: configured for UDMA/133
[水 5月 5 09:46:07 2021] sd 3:0:0:0: [sdd] tag#2 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE cmd_age=3s
[水 5月 5 09:46:07 2021] sd 3:0:0:0: [sdd] tag#2 Sense Key : Medium Error [current] [descriptor]
[水 5月 5 09:46:07 2021] sd 3:0:0:0: [sdd] tag#2 Add. Sense: Unrecovered read error - auto reallocate failed
[水 5月 5 09:46:07 2021] sd 3:0:0:0: [sdd] tag#2 CDB: Read(10) 28 00 68 b1 62 78 00 01 00 00
[水 5月 5 09:46:07 2021] blk_update_request: I/O error, dev sdd, sector 1756455776
[水 5月 5 09:46:07 2021] ata4: EH complete
これが原因かはわかりませんが、
調べてみると壊れる予兆とか、物理的に壊れてるかもしれないなんて情報が出てきますね。
しかもdmesgを遡って行くとsddだけじゃなくて他のHDDでも発生しているっぽい。
RaidZ1なので複数壊れるのはまずい。
加えて実は容量もそろそろ逼迫してきている。
じゃあもう全体的に作り直しちゃおうか!
あ、ちなみにzpoolのscrubでファイルシステムチェックしてみましたが、エラーはなかったです。
# zpool status -v zfs
pool: zfs
state: ONLINE
scan: scrub repaired 0B in 3h51m with 0 errors on Thu May 6 15:13:08 2021
config:
NAME STATE READ WRITE CKSUM
zfs ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
sda ONLINE 0 0 0
sdd ONLINE 0 0 0
sdc ONLINE 0 0 0
sdf ONLINE 0 0 0
errors: No known data errors
物理構成
今までは2TBのHDDを4台使って合計容量5TBくらいでしたが、
今回は4TBのHDDを3台使って構築しようと思います。
以前1台買ってあったので追加でSEAGATE ST4000DM004を2台購入しました。
NAS向けじゃないけどヨシ!
7500円くらいでした。
アップグレード
構築してから結構経つので最新にしようと思います。
# zpool upgrade -v
This system supports ZFS pool feature flags.
The following features are supported:
FEAT DESCRIPTION
-------------------------------------------------------------
async_destroy (read-only compatible)
Destroy filesystems asynchronously.
empty_bpobj (read-only compatible)
Snapshots use less space.
lz4_compress
LZ4 compression algorithm support.
multi_vdev_crash_dump
Crash dumps to multiple vdev pools.
spacemap_histogram (read-only compatible)
Spacemaps maintain space histograms.
enabled_txg (read-only compatible)
Record txg at which a feature is enabled
hole_birth
Retain hole birth txg for more precise zfs send
extensible_dataset
Enhanced dataset functionality, used by other features.
embedded_data
Blocks which compress very well use even less space.
bookmarks (read-only compatible)
"zfs bookmark" command
filesystem_limits (read-only compatible)
Filesystem and snapshot limits.
large_blocks
Support for blocks larger than 128KB.
large_dnode
Variable on-disk size of dnodes.
sha512
SHA-512/256 hash algorithm.
skein
Skein hash algorithm.
edonr
Edon-R hash algorithm.
userobj_accounting (read-only compatible)
User/Group object accounting.
The following legacy versions are also supported:
VER DESCRIPTION
--- --------------------------------------------------------
1 Initial ZFS version
2 Ditto blocks (replicated metadata)
3 Hot spares and double parity RAID-Z
4 zpool history
5 Compression using the gzip algorithm
6 bootfs pool property
7 Separate intent log devices
8 Delegated administration
9 refquota and refreservation properties
10 Cache devices
11 Improved scrub performance
12 Snapshot properties
13 snapused property
14 passthrough-x aclinherit
15 user/group space accounting
16 stmf property support
17 Triple-parity RAID-Z
18 Snapshot user holds
19 Log device removal
20 Compression using zle (zero-length encoding)
21 Deduplication
22 Received properties
23 Slim ZIL
24 System attributes
25 Improved scrub stats
26 Improved snapshot deletion performance
27 Improved snapshot creation performance
28 Multiple vdev replacements
For more information on a particular version, including supported releases,
see the ZFS Administration Guide.
# zfs upgrade -v
The following filesystem versions are supported:
VER DESCRIPTION
--- --------------------------------------------------------
1 Initial ZFS filesystem version
2 Enhanced directory entries
3 Case insensitive and filesystem user identifier (FUID)
4 userquota, groupquota properties
5 System attributes
For more information on a particular version, including supported releases,
see the ZFS Administration Guide.
zpoolが28でzfsが5ってことでしょうか。
アップグレードしてみましたが変わらなかったです。
$ zpool upgrade -a
This system supports ZFS pool feature flags.
All pools are already formatted using feature flags.
Every feature flags pool already has all supported features enabled.
$ zfs upgrade -a
0 filesystems upgraded
あと超久しぶりにyum updateしたんですが、
PT3のドライバが死んで録画できなくなって焦りました。
(zpoolとzfsには影響なし)
ストレージプール作成
データのバックアップが完了しましたらストレージプールを作成します。
HDDは初期不良とかはなく全て認識してくれました。
一応パーティションが作成されていたHDDはfdiskで削除しておきました。
ちなみに購入した4TBのHDDはノータッチです。
今までの使っていたHDDは全て外して、以下の状態で作業を進めます。
# zpool status
no pools available
デバイスIDを調べます。
実は以前
sdeとかsddで作成したんですが、
PCケースを交換する時にテキトーにSATA繋げたらエラーになっちゃいました。
おそらくデバイスIDにすれば配線変わっても大丈夫なんじゃないかと思うのでそうします。
# ls -lh /dev/disk/by-id/
lrwxrwxrwx 1 root root 9 5月 8 12:41 ata-ST4000DM004-XXXXXX_XXXXXXXX -> ../../sdc
lrwxrwxrwx 1 root root 9 5月 8 12:41 ata-ST4000DM004-XXXXXX_XXXXXXXX -> ../../sdd
lrwxrwxrwx 1 root root 9 5月 8 12:43 ata-TS120GSSD220S_XXXXXXXXXXXXXXXXXXXX -> ../../sdb
lrwxrwxrwx 1 root root 9 5月 8 12:41 ata-WDC_WD40EZRZ-XXXXXXX_XX-XXXXXXXXXXXX -> ../../sde
デバイスIDでストレージプールを作成します。
加えて、読み込みが速くなることを願って120GBのSSDをキャッシュデバイスとして加えます。
これでより快適になるといいなぁ。
# zpool create -f tank raidz ata-ST4000DM004-XXXXXX_XXXXXXXX ata-ST4000DM004-XXXXXX_XXXXXXXX ata-WDC_WD40EZRZ-XXXXXXX_XX-XXXXXXXXXXXX cache ata-TS120GSSD220S_XXXXXXXXXXXXXXXXXXXX
問題なく作成できたようです。
# zpool status
pool: tank
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
ata-ST4000DM004-XXXXXX_XXXXXXXX ONLINE 0 0 0
ata-ST4000DM004-XXXXXX_XXXXXXXX ONLINE 0 0 0
ata-WDC_WD40EZRZ-XXXXXXX_XX-XXXXXXXXXXXX ONLINE 0 0 0
cache
ata-TS120GSSD220S_XXXXXXXXXXXXXXXXXXXX ONLINE 0 0 0
errors: No known data errors
容量は7.1TBになりました。
$ df -Th
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
devtmpfs devtmpfs 5.7G 0 5.7G 0% /dev
tmpfs tmpfs 5.7G 0 5.7G 0% /dev/shm
tmpfs tmpfs 5.7G 9.1M 5.7G 1% /run
tmpfs tmpfs 5.7G 0 5.7G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 5.7G 45G 12% /
/dev/sde2 xfs 1014M 336M 679M 34% /boot
/dev/sdj1 xfs 1.9T 1.4T 476G 75% /recorded
/dev/mapper/centos-home xfs 55G 975M 54G 2% /home
tank zfs 7.1T 2.1T 5.0T 30% /tank
tmpfs tmpfs 1.2G 0 1.2G 0% /run/user/1000
sambaで無事共有もできたので問題なさそうです。
動作確認
ひとまず今のところdmesgにエラーは発生しなくなりました。
エクスプローラーで表示が遅いという件は解決せず。
ただ1回開くと2回目以降はすぐに表示されるようになるのでちょっと改善。
うーん。
まぁヨシとしますか。
最後に、ベンチマーク結果です。