Synology - BTRFS 볼륨이 충돌 및 복구되었습니다. 왜 충돌했나요?

Synology - BTRFS 볼륨이 충돌 및 복구되었습니다. 왜 충돌했나요?

이것은 사후 분석이므로 나중에 이 문제가 발생할 수 있는 사람들을 위해 정보를 공개하고 있습니다.

이 문제는 Synology DSM 6.2-25556을 실행하는 Synology RS2818RP+에서 발생했습니다. 시스템에는 Xeon CPU와 ECC 메모리가 포함되어 있습니다. RAID6 어레이를 구성하는 8개의 HUH721010ALE604(HGST WD Ultrastar DC HC510 10TB 7200 RPM SATA)가 있습니다 md. 파일 시스템은 BTRFS입니다.

(이것은 BTRFS RAID가 아니라 체크섬/스냅샷 등과 같은 이점을 위해 BTRFS가 위에 있는 "일반" RAID입니다.)

어젯밤 NAS로부터 다음과 같은 이메일을 받았습니다.

볼륨 1이 충돌했습니다. 이 상황에서는 더 많은 파일이 손상될 수 있습니다. 자세한 내용은 저장소 관리자 > 볼륨으로 이동하세요.

답변1

WebGUI를 방문했습니다. 볼륨이 오프라인인 것 외에는 시스템에 전혀 오류가 없었습니다.

  • 각 디스크의 SMART 상태를 확인했는데 괜찮은 것 같았습니다.
  • "Storage Manager"에 "Healthy"가 표시되었습니다.
  • "스토리지 풀"이 "정상"으로 표시되었습니다.

"볼륨"만 충돌된 것으로 나타났습니다.

SSH로 접속해서 체크인했습니다. mdadm --D /dev/md2내 배열이 있던 곳입니다. 보여주고 있었어요State: Clean, Degraded

dmesg를 확인해보니 다음과 같은 내용이 발견되었습니다.

[5638907.327288] ------------[ cut here ]------------
[5638907.332247] WARNING: CPU: 3 PID: 10234 at fs/btrfs/extent-tree.c:4207 btrfs_write_dirty_block_groups+0x365/0x390 [btrfs]()
[5638907.343601] BTRFS: Transaction aborted (error -2)
[5638907.343603] Modules linked in: nfsd exportfs rpcsec_gss_krb5 cifs udf isofs loop tcm_loop(O) iscsi_target_mod(O) target_core_ep(O) target_core_multi_file(O) target_core_file(O) target_core_iblock(O) target_core_mod(O) syno_extent_pool(PO) rodsp_ep(O) hid_generic usbhid hid usblp usb_storage denverton_synobios(PO) overlay exfat(O) btrfs synoacl_vfs(PO) hfsplus md4 hmac bnx2x(O) mdio mlx5_core(O) mlx4_en(O) mlx4_core(O) mlx_compat(O) qede(O) qed(O) atlantic(O) tn40xx(O) i40e(O) ixgbe(O) be2net(O) igb(O) i2c_algo_bit e1000e(O) vxlan ip6_udp_tunnel udp_tunnel fuse vfat fat crc32c_intel aesni_intel glue_helper lrw gf128mul ablk_helper arc4 cryptd ecryptfs sha256_generic ecb aes_x86_64 authenc des_generic ansi_cprng cts md5 cbc cpufreq_powersave cpufreq_performance acpi_cpufreq processor cpufreq_stats
[5638907.425092]  dm_snapshot dm_bufio crc_itu_t crc_ccitt quota_v2 quota_tree psnap p8022 llc sit tunnel4 ip_tunnel ipv6 zram sg etxhci_hcd xhci_pci xhci_hcd uhci_hcd ehci_pci ehci_hcd usbcore usb_common [last unloaded: denverton_synobios]
[5638907.448308] CPU: 3 PID: 10234 Comm: btrfs-transacti Tainted: P           O    4.4.59+ #25556
[5638907.457047] Hardware name: Synology Inc. RS2818RP+/Type2 - Board Product Name1, BIOS M.212 2019/11/01
[5638907.466571]  0000000000000000 ffff880068a0fc50 ffffffff812bf70d ffff880068a0fc98
[5638907.474851]  ffffffffa0939b8d ffff880068a0fc88 ffffffff8104b7cd ffff8801704f9e00
[5638907.483132]  ffff88003b616338 0000000000000001 00000000fffffffe ffff8801704f9f50
[5638907.491422] Call Trace:
[5638907.494179]  [<ffffffff812bf70d>] dump_stack+0x4d/0x70
[5638907.499623]  [<ffffffff8104b7cd>] warn_slowpath_common+0x7d/0xc0
[5638907.505932]  [<ffffffff8104b859>] warn_slowpath_fmt+0x49/0x50
[5638907.511996]  [<ffffffffa0892d45>] btrfs_write_dirty_block_groups+0x365/0x390 [btrfs]
[5638907.520056]  [<ffffffffa0932df8>] commit_cowonly_roots+0x230/0x2d1 [btrfs]
[5638907.527250]  [<ffffffffa08a90e8>] btrfs_commit_transaction+0x528/0xcb0 [btrfs]
[5638907.534793]  [<ffffffffa08a9905>] ? start_transaction+0x95/0x3d0 [btrfs]
[5638907.541810]  [<ffffffffa08a387c>] transaction_kthread+0x1ec/0x220 [btrfs]
[5638907.548915]  [<ffffffffa08a3690>] ? btrfs_cleanup_transaction+0x510/0x510 [btrfs]
[5638907.556701]  [<ffffffff810672a6>] kthread+0xc6/0xe0
[5638907.561883]  [<ffffffff810671e0>] ? kthread_create_on_node+0x180/0x180
[5638907.568717]  [<ffffffff81567abf>] ret_from_fork+0x3f/0x80
[5638907.574423]  [<ffffffff810671e0>] ? kthread_create_on_node+0x180/0x180
[5638907.581346] ---[ end trace 27185b26c2db1370 ]---
[5638907.586280] BTRFS: error (device md2) in btrfs_write_dirty_block_groups:4207: errno=-2 No such entry
[5638907.595721] BTRFS info (device md2): forced readonly
[5638907.600997] BTRFS warning (device md2): Skipping commit of aborted transaction.
[5638907.608618] BTRFS: error (device md2) in cleanup_transaction:2019: errno=-2 No such entry
[5638907.617108] BTRFS info (device md2): delayed_refs has NO entry

따라서 데이터는 거기에 있었고 배열은 읽기 전용이었습니다. 제가 조사한 결과 다음 SuSe KB로 이동했습니다.https://www.suse.com/support/kb/doc/?id=000018769

나는 내가 얻은 것과 같은 오류를 언급합니다 BTRFS: Transaction aborted (error -2).

기사에는 다음과 같은 내용이 나와 있습니다.

좋은 점은 치명적인 오류가 아니라 경고라는 것입니다. 예를 들어 할당량과 관련된 이와 같은 경고는 일반적으로 경고가 발생한 후 BTRFS에 의해 수정되는 런타임 전용 항목입니다. 나쁜 문제는 아닙니다.

어느 정도 안심이 되었습니다.

나는

syno_poweroff_task -d

볼륨에 액세스할 수 있는 모든 Synology 서비스를 종료하기 위해. 이렇게 하면 WebUI 등이 중지되지만 SSH는 계속 켜져 있습니다.

나는 그런 다음

umount /volume1 

볼륨에 대한 I/O를 중지하기 위해(위의 출력에 따라 이미 RO 모드에 있었지만) 그런 다음 장치 에서 dmesg작업을 수행했습니다 . 아래 출력btrfsckmd2

# btrfsck /dev/md2
Syno caseless feature on.
Checking filesystem on /dev/md2
UUID: 7a29febb-e9b5-4f77-afd7-4e1e10971340
checking extents
checking free space tree
checking fs roots
checking csums
checking root refs
found 30769182859264 bytes used err is 0
total csum bytes: 44052
total tree bytes: 50331648
total fs tree bytes: 24477696
total extent tree bytes: 23691264
btree space waste bytes: 1190925
file data blocks allocated: 30769149861888
referenced 30769131089920

그리고 dmesg에서:

[5644451.646580] BTRFS info (device md127): using free space tree
[5644451.652561] BTRFS info (device md127): has skinny extents
[5644459.827213] BTRFS info (device md127): checking UUID tree

완료되면 시스템을 재부팅하기만 하면 모든 것이 정상적으로 작동했습니다.

현재 볼륨 일관성 검사를 실행 중입니다. 이는 현재 거의 24시간 동안 문제 없이 실행되고 있는 mdadm "재동기화"라고 생각됩니다.

이 게시물을 작성하는 목적은 btrfs에 대해 좀 더 노하우가 있는 사람이 이러한 현상을 경험했는지, 그리고 이러한 현상이 발생한 원인에 대한 아이디어가 있는지 알아보는 것인 것 같습니다.

관련 정보