Каталог поврежден ZFS, но zpool не обнаруживает что-то не так

Каталог на моем сервере FreeBSD 10.2 каким-то образом безнадежно поврежден (разве ZFS не должна была предотвращать это ?)

ls или любая другая команда против него приводит к зависанию текущего сеанса на уровне ядра (даже SIGKILL ничего не делает).

enter image description here

ZFS scrub не обнаруживает проблем.

 # zpool status zroot
  pool: zroot
 state: ONLINE
  scan: scrub repaired 0 in 0h17m with 0 errors on Sun Dec 18 18:25:04 2016
config:

    NAME        STATE     READ WRITE CKSUM
    zroot       ONLINE       0     0     0
      gpt/zfs0  ONLINE       0     0     0

errors: No known data errors

smartctl говорит все. с диском все в порядке.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   016    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   137   137   054    Pre-fail  Offline      -       89
  3 Spin_Up_Time            0x0007   128   128   024    Pre-fail  Always       -       314 (Average 277)
  4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always       -       78
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   142   142   020    Pre-fail  Offline      -       29
  9 Power_On_Hours          0x0012   097   097   000    Old_age   Always       -       24681
 10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       78
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       306
193 Load_Cycle_Count        0x0012   100   100   000    Old_age   Always       -       306
194 Temperature_Celsius     0x0002   171   171   000    Old_age   Always       -       35 (Min/Max 20/46)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       0

Даже zdb не обнаружил ничего неправильного.

# zdb -c zroot

Traversing all blocks to verify metadata checksums and verify nothing leaked ...

loading space map for vdev 0 of 1, metaslab 44 of 116 ...
12.2G completed (  60MB/s) estimated time remaining: 0hr 00min 00sec        
    No leaks (block sum matches space maps exactly)

    bp count:          956750
    ganged count:           0
    bp logical:    43512090624      avg:  45479
    bp physical:   11620376064      avg:  12145     compression:   3.74
    bp allocated:  13143715840      avg:  13737     compression:   3.31
    bp deduped:             0    ref>1:      0   deduplication:   1.00
    SPA allocated: 13143715840     used:  1.32%

    additional, non-pointer bps of type 0:     123043
    Dittoed blocks on same vdev: 62618

В каталоге нет важных данных, поэтому было бы хорошо, если бы я мог просто удалить его и перейти к «чистое» состояние.

Одно из решений, которое приходит на ум, - создать новый пул ZFS, скопировать все исправные данные, а затем удалить старый. Но это очень опасно. Что, если система зависнет и мой сервер выйдет из строя?

Можете ли вы придумать способ избавиться от поврежденного каталога без особых сбоев?

2
задан 18 December 2016 в 15:04
1 ответ

Каталог на моем сервере FreeBSD 10.2 каким-то образом был безнадежно поврежден (разве ZFS не должна была предотвратить это?)

ZFS обнаруживает ошибки только на дисках, а не в памяти (за это отвечает ECC здесь) или ваши приложения (потому что он не знает, хотите ли вы записать мусор в ваши файлы или нет).

Кроме того, только однодисковый vdev поддерживает ваш пул, даже если ошибки обнаружены, они не могут быть исправлены . Добавьте второй диск, чтобы включить это, иначе вам придется удалить затронутые файлы и восстановить их из резервной копии.

Одно из решений, которое приходит на ум, - создать новый пул ZFS, скопировать все исправные данные, а затем удалить старые один. Но это очень опасно. Что, если система зависнет и мой сервер выйдет из строя?

Тогда ваш сервер, скорее всего, выйдет из строя, перезапустится и продолжит работу без ошибок, покажет те же ошибки или получит новые ошибки. На самом деле никто не знает, поэтому я советую сосредоточиться на том, как удалить ошибку навсегда:

Создайте резервную копию своих данных (как вы уже должны были сделать, потому что даже ZFS может убить ваши данные с ошибками или ошибками), перезагрузите сервер, проверьте журналы на все подозрительные. Делайте это в то время, когда вы можете позволить себе простой. Если вы не можете позволить себе простой, вам следует иметь хотя бы еще одну машину, которая сможет заменить вас, поэтому подумайте о своих потребностях и стратегии. Если вы обнаружите что-то похожее на ошибку, попробуйте воспроизвести ее на второй машине (используйте zfs send / recv , чтобы скопировать пул).

Можете ли вы придумать способ избавиться от поврежденного каталога без особого нарушения?

Используйте zfs send , чтобы скопировать файловую систему ZFS, которая содержит этот каталог (худший случай: корневая файловая система или весь пул; лучший случай: только этот каталог ) и zfs recv по конвейеру (или по конвейеру через ssh или netcat ), чтобы скопировать текущий моментальный снимок на другой компьютер или резервный носитель, затем удалите каталог на старый компьютер, как обычно, и повторно заполните его из заведомо исправной резервной копии или ваших приложений (в большинстве случаев это означает переустановку).

Если что-то пойдет не так или вы захотите позже изучить, у вас есть скопированный снимок, содержащий все данные, снимки и метаданные с этого момента времени.

3
ответ дан 3 December 2019 в 10:36

Теги

Похожие вопросы