LINUX.ORG.RU
ФорумAdmin

Как бы починить «неломающуюся» fs: zfs? Есть файлы которые невозможно удалить.

 , ,


1

3

Приветствую, уважаемое сообщество.
Занялся тут изучением zfs и прогоном скорости паковки разными алгоритмами. Вся работа была с SATA hdd подключенном через USB3 рэк. Идея была в прогоне этого винта на разных процессорах и замера скорости упаковки (отработки rsync на одних и тех же данных).
Всё сумбурно, и не всегда читал/фиксировал вывод команд. Они в общем то выводили в скриптах и в финале ошибки уже пролетали. После очередного цикла - заметил ошибку при rm -rf
Оставались неудаляемые файлы. Я даже и не представляю как это показать общественности.

Например

/usr/share/icons/matefaenza/mimetypes# ls -ld 64 
drwxr-xr-x 2 root root 373 мая 27  2018 64

/usr/share/icons/matefaenza/mimetypes# rm -rf 64 
rm: невозможно удалить '64': Каталог не пуст

/usr/share/icons/matefaenza/mimetypes# ls -l 64 
ls: чтение каталога '64': Ошибка ввода/вывода
итого 0

Тут не файлы, тут пустые каталоги не удалить.
С файлами немного по другому:
/usr/share/icons/matefaenzadark/actions/16# ls -l stock_mail-send-receive.png 
ls: невозможно получить доступ к 'stock_mail-send-receive.png': Некорректный обмен

И как теперь эти файлы/каталоги удалить? Неужели пул придется бэкапить и пересоздавать?

Дайте какие нибудь рекомендации для устранения этой ошибки.

P.S. При прогоне собралось тьма сырых даных, надо оформить в таблицах. Тупо rsync 64Gb данных занимал от 58 минут и до 11 часов и 27 минут
Без упаковки rsync отрабатывал от 59 минут (на BMAX B1 Pro) и до 73 минут (На Celeron E3400 @2.6GHz)

Упаковывалось до следующих значений:
# zfs list
NAME                         USED  AVAIL     REFER  MOUNTPOINT
S1T1Archive                  736G   164G     16.6M  /S1T1Archive
S1T1Archive/gzip            37.7G   164G     37.7G  /S1T1Archive/gzip
S1T1Archive/gzip-1          38.6G   164G     38.6G  /S1T1Archive/gzip-1
S1T1Archive/gzip-9          37.6G   164G     37.6G  /S1T1Archive/gzip-9
S1T1Archive/lz4             41.4G   164G     41.4G  /S1T1Archive/lz4
S1T1Archive/lzjb            43.9G   164G     43.9G  /S1T1Archive/lzjb
S1T1Archive/off             64.4G   164G     64.4G  /S1T1Archive/off
S1T1Archive/off-copy        64.4G   164G     64.4G  /S1T1Archive/off-copy
S1T1Archive/zle             60.8G   164G     60.8G  /S1T1Archive/zle
S1T1Archive/zstd            37.9G   164G     37.9G  /S1T1Archive/zstd
S1T1Archive/zstd-1          38.2G   164G     38.2G  /S1T1Archive/zstd-1
S1T1Archive/zstd-19         36.9G   164G     36.9G  /S1T1Archive/zstd-19
S1T1Archive/zstd-fast       39.5G   164G     39.5G  /S1T1Archive/zstd-fast
S1T1Archive/zstd-fast-1     39.5G   164G     39.5G  /S1T1Archive/zstd-fast-1
S1T1Archive/zstd-fast-10    42.2G   164G     42.2G  /S1T1Archive/zstd-fast-10
S1T1Archive/zstd-fast-100   50.4G   164G     50.4G  /S1T1Archive/zstd-fast-100
S1T1Archive/zstd-fast-1000  60.5G   164G     60.5G  /S1T1Archive/zstd-fast-1000

off - Это собственно исходник который рсинкался в подразделы с разными алгоритмами.

P.S.
(240519)
Гугля, набрёл на хорошую статью о ручном восстановлении zfs, с описанием структур данных zfs: https://www.lissyara.su/articles/freebsd/file_system/zfs_recovery/

★★★

Последнее исправление: n0mad (всего исправлений: 4)

Нет смысла тестировать алгоритмы сжатия. Их протестировали за тебя. Самый лучший - это zstd. Он хорошо сжимает и быстро распаковывает. Для слабых компов zstd-1, для чего-то типа рязани 1600 и выше - zstd-3, для более мощных zstd-6 до zstd-9, после последнего скорость записи начинает резко падать (в два раза с каждым уровнем), но скорость распаковки будет лишь в пару раз ниже чем при 3 уровне

anonymous
()

https://docs.oracle.com/cd/E36784_01/html/E36835/gbctx.html

А что за ядро, версия openzfs? У zfs перед btrfs преимущество только в нативном шифровании, но чето такие баги очень странные, надеюсь ты просто криворук, а то как-то странно выглядит что фс, которую все хвалят страдает детскими болезнями

anonymous
()
Ответ на: комментарий от anonymous

У zfs перед btrfs преимущество только в нативном шифровании

Такое себе преимущество, честно говоря. Во-первых, FBE всегда менее безопасно, поскольку обычно не скрывает размеры файлов, как и метаданные. Не знаю, шифрует ли ZFS xattrs. Во-вторых, fscrypt уже довольно близко к принятию в Btrfs. Кто-то вроде даже пользуется, но я бы точно не стал :) В общем, если есть возможность использовать FDE (dm-crypt или его аналоги для *BSD), то лучше так и делать.

anonymous
()

Занялся тут изучением zfs и прогоном скорости паковки разными алгоритмами. Вся работа была с SATA hdd подключенном через USB3 рэк

Сорри за флуд, но, как можно что-то измерить, бутерброде из USB + SATA? Куча конвертаций же…

DALDON ★★★★★
()
Ответ на: комментарий от intelfx

Для многих поклонников ZFS является аксиомой, что пул нельзя заполнять на величину более 80%. Не уверен, что это технически обосновано, но оно так же популярно, как легенда про обязательность ECC-памяти.

anonymous
()

Очень просто, сначала нужно «взять чистую посуду».

Я всё понимаю, юсб еле дышащий короб очень помогает в деле маркетинговых пропагандистских акций, но увы для вас – на исправном оборудовании ZFS работает великолепно. А на неисправном глючить будет любая ваша любимая ФС.

Если ещё и скруб покажет повреждение данных, то или короб, или диск, или и то и другое в помойку.

anonymous
()
Ответ на: комментарий от DALDON

Сорри за флуд, но, как можно что-то измерить, бутерброде из USB + SATA? Куча конвертаций же…

Понимаю, но мне и интересен этот бутерброд. Есть можно сказать штатная операция - rsync, есть упаковка (а это ещё слой бутерброда, весьма существенный, когда она идёт 11 часов)
Я даже ещё хочу усугубить, с подачи одного LORовца, о том что комп жрёт 150Вт+ а этот МикроПК 11*11 см - жрёт отдельные ватты.
Так вот интересна жизнеспособность рейда на 2х 4T винтах, включенных по USB3. Экономия грубо 500р/мес. (При 24*7 онлайна, как у меня сейчас и работает комп).

n0mad ★★★
() автор топика
Ответ на: комментарий от GAMer

Перезагружался? scrub прогонял?

Вот про scrub и была мысль сразу, но не помогло. Перезагружался не единожды. Мучаю железку. MicroSD вставленная в корпус, видится как sda и читается 14Mb/s. Ткнул USB3 переходник с MicroSD, неожиданно видится как sdc и читается 80Mb/s.
Поставил ещё Дебиан. Встало, взлетело, просто MicroSD из слота подключенная по USB3 - не взлетает. Так что сейчас там 2 Дебиана.

n0mad ★★★
() автор топика
Ответ на: комментарий от anonymous

Для многих поклонников ZFS является аксиомой, что пул нельзя заполнять на величину более 80%.

В листинге видно что пул заполнен на 736Гб и 164 свободно, итого 900.

Не уверен, что это технически обосновано, но оно так же популярно, как легенда про обязательность ECC-памяти.

Про «легенду» могу сказать только одно: БЭКАП, а вообще обидно что даже от примитивного PARITY отказались, хотя в своё время это была хорошая головная боль.

n0mad ★★★
() автор топика
Ответ на: комментарий от anonymous

зачем вы всё насилуете этого монстра?

Затем что купил, а вдруг перейду на него (11см*11см*2см) вместо моего настольного гробика, (42см*45см*18см).
Я же ещё тот «Динозавр», а сейчас машинка начального уровня «делает» моих мастодонтов. Комп за 100к и насладиться современной производительностью - я себе купить не могу.

n0mad ★★★
() автор топика
Ответ на: комментарий от anonymous

Очень просто, сначала нужно «взять чистую посуду».

Вопрос был в том: «Как починить», без зануления.

Я всё понимаю, юсб еле дышащий короб очень помогает в деле маркетинговых пропагандистских акций, но увы для вас – на исправном оборудовании ZFS работает великолепно. А на неисправном глючить будет любая ваша любимая ФС.

Почему «увы для вас», это уже оскорбление...
И то что всё глючит на неисправном оборудовании - прекрасно понимаю. ПОСЫЛ БЫЛ: «МОЖНО ЛИ ПОЧИНИТЬ»? Или в морг?

Если ещё и скруб покажет повреждение данных, то или короб, или диск, или и то и другое в помойку.

Плохо если невозможно пофиксить и продолжить работу. Данные повреждены? Так пусть фс сообщит об этом и работает дальше. Тут же ФС НЕ РАБОТАЕТ должным образом.

# zpool status S1T1Archive
  pool: S1T1Archive
 state: DEGRADED
status: One or more devices has experienced an error resulting in data
	corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
	entire pool from backup.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-8A
config:

	NAME           STATE     READ WRITE CKSUM
	S1T1Archive    DEGRADED     0     0     0
	  S1T1Archive  DEGRADED     1     0  716K  too many errors

errors: 2381 data errors, use '-v' for a list


И в общем то -v даёт список поврежденных файлов.

n0mad ★★★
() автор топика
Последнее исправление: n0mad (всего исправлений: 1)
Ответ на: комментарий от Clockwork

Так она ж и сообщает, судя по твоему zpool status и работает дальше. И даже говорит как исправить.

Ну в общем то: «It is also possible for the corruption to be within pool-wide metadata, resulting in entire datasets being unavailable. If this is the case, the only option is to destroy the pool and re-create the datasets from backup.»

Удалить и пересоздать. Думал вдруг ещё какой путь есть.

n0mad ★★★
() автор топика
Ответ на: комментарий от anonymous

не помогло.

Что не помогло? не нашло ошибок?

Не позволило удалить файлы/каталоги.

переходник с MicroSD

тебе повезло, что флешку не убил. zfs для такого не предназначены

Что значит «не убил»? В плане данных? Я как раз ищу алгоритмы работы с zfs позволящие перетаскивать всё, вплоть до RAID. Там же много ньюансов, вплоть до адресации. Можно /dev/sdXY, можно по UUID, можно по gpt имени раздела.

n0mad ★★★
() автор топика
Ответ на: комментарий от Clockwork

Другой путь это спасать его вручную, сделав заранее дамп, потом каждый файл, который в ‘-v’ восстанавливать по отдельности

Вот в этом как раз и проблема. Я не могу просто удалить файлы и залить из бэкапа. Пока использовал воркэраунд - переименовать верхушку неудаляемого дерева в BAD и после этого не раз сделать новый рсинк и rm -rf.

n0mad ★★★
() автор топика
Последнее исправление: n0mad (всего исправлений: 2)
Ответ на: комментарий от Clockwork

https://docs.freebsd.org/en/books/handbook/zfs/
https://openzfs.github.io/openzfs-docs/man/master/8/zpool-scrub.8.html

Спасибо, пока кажется нашел решение. Сейчас отработает rm -rf всего этого сета данных (Веду логи времени удаления, и кстати появились свежие строки: «некорректный обмен»).
Потом сделаю #zfs destroy для всех подтомов со своими алгоритмами паковки и должен остаться чистый том. Сделаю ему scrub и посмотрю что из всего этого получится. Потом уже постараюсь отмониторить условия появления этих ошибок.

n0mad ★★★
() автор топика
Ответ на: комментарий от n0mad

Потом уже постараюсь отмониторить условия появления этих ошибок.

Причём ошибки появились на непакованном подтоме.
В общем то всё было однотипно.
rsync md0-root off (Датасет с отключенной упаковкой)
затем
rsync md0-root lz4 (Датасет с упаковкой lz4)
Ну и масса всех остальных.
Сейчас rm-rf off/md0-root - Дала ошибки: «Некорректный обмен»,
а rm-rf lz4/md0-root отработала.

n0mad ★★★
() автор топика
Ответ на: комментарий от n0mad

в зфс нет томов и подтомов, поэтому не понятно что ты делешь и зачем

Я как раз ищу алгоритмы работы с zfs позволящие перетаскивать всё, вплоть до RAID.

не-а, ты ищещь способ копирования данных при помощи rsynс

а потом ты пытаешься способом btrfs удалить датасет случайным rm-rf-ом

anonymous
()
Ответ на: комментарий от anonymous

в зфс нет томов и подтомов,

Придираться к названиям будем?
Типа это не тома/подтома а пулы и датасеты?

     Example 1: Creating a ZFS File System Hierarchy
       The following commands create a file system named pool/home and a file
       system named pool/home/bob.  The mount point /export/home is set for
       the parent file system, and is automatically inherited by the child
       file system.
             # zfs create pool/home
             # zfs set mountpoint=/export/home pool/home
             # zfs create pool/home/bob

Вот эти все датасеты я и называю «подтома». Каждому же можно свой путь монтирования назначить.

поэтому не понятно что ты делешь и зачем

Я тупо меряю время rsync и полученную компрессию для разных алгоритмов. Хочу знать - какой алгоритм на что способен.

n0mad ★★★
() автор топика
Ответ на: комментарий от rtxtxtrx

А hdd нормальный был или как обычно- мусор с алика?

Ну... Это вопрос интересный...

Model Family:     SAMSUNG SpinPoint F3 EG
Device Model:     SAMSUNG HD105SI
.....
 5 Reallocated_Sector_Ct   0x0033   252   252   010    Pre-fail  Always       -       0
197 Current_Pending_Sector  0x0032   252   100   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -
       77095

У этого винта уже 8.8 лет аптайма, и ни Reallocated ни Pending нет.
Ну что же, придётся забэкапить, пересоздать пул и забить заново, проверяя целостность.
Щас, только многочасовой rm -rf отработает...

n0mad ★★★
() автор топика
Последнее исправление: n0mad (всего исправлений: 2)
Ответ на: комментарий от n0mad

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

DALDON ★★★★★
()
Ответ на: комментарий от DALDON

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

Я вообще не понимаю при чём тут zfs и аппаратный рейд? Логически аппаратный рэйд ничем не отличается от диска, и я не понимаю почему запрещают. Надо смотреть конкретный случай, а то чудные люди ведь могут и zfs рейд поднять поверх аппаратного рейда.
Опять же - к чему относится фраза:

Не может ли дело в этом быть?

n0mad ★★★
() автор топика
Ответ на: комментарий от n0mad

Ну значит причина не в нем, а именно ZFS превратилась в тыкву. Любопытно. У меня Btrfs ломалась только в результате выключения электричества, да и то такое происходит не всегда, а в 1 из десятка случаев (да и там ошибка чексум, а не что-то серьезное, те скрабом лечится). Два дня назад так же электричество отрубили, но сломалась NTFS, которая починилась утилитой ntfsfix

rtxtxtrx ★★
()
Последнее исправление: rtxtxtrx (всего исправлений: 2)
Ответ на: комментарий от rtxtxtrx

Ну значит причина не в нем, а именно ZFS превратилась в тыкву.

Но у меня серия замеров на 3 разных компах с 3 разными USB3 адаптерами. Теперь есть пища для размышлений. По результатам всё ещё идущего rm -rf (Уже несколько часов) всё будет ясно, хотя... USB3 Винт не моргает, похоже случилась конкретная «тыква», rm -rf ещё не отработал, параллельное окно не заходит в точку монтирования того zfs, хотя у меня на том компе 8 накопителей, и 5 из них под zfs. Тыквой стал один пул, есть ещё 2 пула, один из них на том же USB3 контроллере. Он работает. Ну что же, пусть «сушится», может «развиснет». Благо теперь есть ещё микрокомп который выдержал тот же сет данных, ни один раздел не превратив в тыкву, и выполнял тесты быстрее конкуррентов.

Любопытно. У меня Btrfs ломалась только в результате выключения электричества, да и то такое происходит не всегда, а в 1 из десятка случаев (да и там ошибка чексум, а не что-то серьезное, те скрабом лечится). Два дня назад так же электричество отрубили, но сломалась NTFS, которая починилась утилитой ntfsfix

Но в общем то в серии испытаний, кажется вчера пришел и всё вырублено, видимо рубили элкетричество пока меня не было.

n0mad ★★★
() автор топика
Ответ на: комментарий от anonymous

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

Ну я ССЗБ, и с xfs живу давно. На штатных винтах. У zfs есть две необходимые фичи:
1. Онлайн упаковка, разными алгоритмами. Архивы можно складировать в датасет с gzip-9, что то более критичное к скорости - держать в формате lzh, а что то совсем критичное вообще без компрессии.
2. Нативный рейд. Причем рейд, который можно начать с одного устройства, потом подключить второе как зеркало.
Я пока это исследую. Хочу рейд который спокойно перенесет перестановку в другой комп, а там ньюансы с именованием разделов.

И есть подозрение что удастся удалить с пула все дефектные датасеты и он будет чист, в плане ошибок.
А пока как в том анекдоте: «Ай Лайк ту мувит, мувит».

n0mad ★★★
() автор топика
Последнее исправление: n0mad (всего исправлений: 2)
Ответ на: комментарий от vbr

Попробуй bcachefs.

Я не готов пробовать ФС В КАШЕ, насколько я понимаю она тоже далеко не продакшн.
В zfs мне нравится то что она «сама в себе». Ты можешь тупо создать датасет и указать ему точку монтирования. При загрузке системы оно смонтируется туда, и в любой момент можно посмотреть сколько там набралось данных. Берешь, ставишь систему на небольшой раздел, а хомяки и /opt выносишь на большой zfs. И всё... они сами делят место. Датасеты как бы отдельные и можно видеть их размеры, но берут пространство из общего пула.

n0mad ★★★
() автор топика

Всё просто, перегрев контроллера + юсб3 не предназначена для гарантированной передачи данных на продолжительном временном отрезке.

Тут так же, как и с современными процами, пять минут шпарит, потом скукоживается и ползёт.

Линухосные фс в таких условиях разлетаются на куски, унося данные вникуда.

anonymous
()
Ответ на: комментарий от anonymous

Всё просто, перегрев контроллера + юсб3 не предназначена для гарантированной передачи данных на продолжительном временном отрезке.

Кто сказал? В каком даташите это написано? Если бы это было так, то были бы предусмотрены меры для защиты. У меня USB3 винтов пачка, мне даже пришлось купить 7Портовый USB3 контроллер, и да. Были с ним косяки, как и с предыдущим. Но я как раз перед ним приобрёл активный USB3 хаб. Увидел ошибки в сислоге, включил Хаб и они пропали, даже на устройствах включенных в контроллер (Видимо блок питания хаба - питает и другие порты контроллера, но теперь косяк при выключенном компьютере. Напряжение приходящее на USB3 порт из хаба - производит непроизвольные звуки со стороны выключенного системного блока). Я видел ошибки в сислоге. Сейчас ошибок в сислоге нет, но данные портятся.
Ситуация ещё требует изучения.
Дошло до смешного.
Вытащил винт из пластикового USB3 корпуса, переткнул в 2.5"/3.5" док-станцию, пересоздал пул.
Распаковал .sq размером 614Gb с 764Gb данных.
сделал (du -sh --app), посмотрел размер данных.
Дало 764Gb. Ошибок не увидел.
В zfs с упаковкой zstd эти данные занимают 692Gb (du -sh)
При измерении насыпало ошибок:
---
du: невозможно получить доступ к 'Zer0opt/=Safe/Users/Oleg/0Web/Mirrors.111016/DL/08.H.z0ne.99k.org/_/Linkor.cp1251/plugins/editors/info.php': Некорректный обмен
---
ОТКУДА ОНИ ПОЯВИЛИСЬ? Если первый запуск не дал ошибок?


Тут так же, как и с современными процами, пять минут шпарит, потом скукоживается и ползёт.

Ну не знаю, рсинк без упаковки проходил:
Intel(R) Pentium(R) 4 CPU 3.20GHz - 1:06:39
Замеры проца не делал.
Intel(R) Celeron(R) CPU E3400 @ 2.60GHz - 1:13:13
Температура проца при этом как была в покое 50 так и осталась
Intel(R) Celeron(R) N4000 CPU @ 1.10GHz - 59:08
Проц при этом нагрелся с 50 в покое до 65 (У проца пассивное охлаждение)

на самом УБОЙНОМ тесте - алгоритм: zstd-19 давал упаковку 64Gb до 37Gb за:
Intel(R) Pentium(R) 4 CPU 3.20GHz - 11:27:50
Замеры проца не делал.
Intel(R) Celeron(R) CPU E3400 @ 2.60GHz - 11:16:04
Проц при этом нагрелся с 50 в покое до 87
Intel(R) Celeron(R) N4000 CPU @ 1.10GHz - 11:11:24
Проц при этом нагрелся с 50 в покое до 75 (У проца пассивное охлаждение)

Линухосные фс в таких условиях разлетаются на куски, унося данные вникуда.

Ну теперь у меня прецедент есть. По ходу, буду тестить. Изучу алгоритм сбора контрольных сумм дерева файлов и сверки после копирования, тогда и займусь. Пока не представляю как это. Разве только md5 600Gb .sq образа раздела сделать и сравнить. Но это не совсем честно. Пока этот терабайтник пустой - есть простор для экспериментов. Для винтов есть USB3 корпус и USB3 док, и 3 USB3 хоста. Покомбинирую. Теперь я знаю куда смотреть. Есть ещё 2 2.5" внешних 1Тб, под NTFS, я даже и не подозревал что на них могут быть ошибки. Считал что уж CRC то проверяется на пути данных, иначе это вообще трэш... Контроллер должен вернуть ошибку если получил искаженные данные.

n0mad ★★★
() автор топика