Какие файловые дескрипторы кроме 0, 1 и 2

Я считаю, что очистка необходима для обеспечения целостности данных, потому что весь набор данных хранится на одном физическом диске?

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

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

Теперь, как было сказано, все, что скраб будет делать с однодисковым пулом, - это отмечать файлы с поврежденными блоками как недоступные. Правильно: если ZFS обнаружит хотя бы одну битовую ошибку в таком файле, она не позволит вам прочитать этот файл целиком. ZFS доставляет только те данные, о которых известно, что они не повреждены.

Вот почему вы хотите использовать ZFS с некоторым объемом избыточного хранилища, если это возможно. Если вы предоставите ZFS зеркало для работы, то один и тот же блок в обоих зеркалах должен быть поврежден, чтобы получить тот же результат.

ZFS по-прежнему позволяет вручную выполнить восстановление из такой ситуации в однодисковом пуле: восстановить этот файл из резервной копии. (Который, надеюсь, также имеет аналогичную контрольную сумму, поэтому вы знаете, что восстанавливаете неповрежденную версию файла.) Поскольку ZFS представляет собой файловую систему копирование при записи , восстановленный файл сохраняется в неиспользуемых блоках данных, а старая версия удаляется, включая ее поврежденные блоки данных.

Будет ли решена проблема порки, если я куплю больше дисков и использую какую-нибудь форму raidz?

Очистка займет примерно то же время, что и чтение всего пула, если пул простаивает. Для такого большого диска я ожидаю, что это займет от 8 до 24 часов.

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

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

# watch -n 120 zpool status

Обратите внимание на то, сколько времени потребуется для скраба, а затем ложитесь спать. Когда вы просыпаетесь утром после N часов сна, посмотрите, не было ли вычтено больше или меньше N часов из этой оценки. Я подозреваю, что он упал немного больше, чем N, потому что теперь системе больше нечего делать, кроме как очистить этот диск.

В этом случае вы захотите выяснить, какой фоновый процесс, работающий в многопользовательском режиме, продолжает дергать ZFS за локоть, мешая ей выполнять полезный объем работы.

Что касается вашего фактического вопроса: нет, покупка большего количества дисков не ускорит процесс очистки.Это просто даст ZFS больше шансов на автоматическое восстановление после событий повреждения данных. Независимо от того, сколько дисков вы ему дадите, ZFS все равно должна прочитать все блоки данных на диске, чтобы выполнить очистку, а это занимает много часов с современными многотерабайтными дисками.

Осторожно: добавление дисков также снижает MTBF для всего пула, но это компромисс: больше денег тратится как на начальном этапе, так и в долгосрочной перспективе на восстановление после ошибок без необходимости прибегать к резервному копированию. ZFS не является резервной копией, но с избыточным хранилищем может уменьшить количество раз, которое вам нужно будет возвращаться к этой резервной копии для файла.

(Резервные копии защищают не только от сбоя носителя: случайное удаление, вредоносное ПО, внешнее аварийное восстановление и т. Д. Вам по-прежнему нужны резервные копии с ZFS.)

Купить 2 диска по 4 ТБ и использовать неизбыточное чередование? (самый дешевый)

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

Купить 3 диска по 4 ТБ и использовать избыточную полосу? (дороже)

Учитывая, что замена диска в современном многотерабайтном пуле может занять много часов, я рекомендую использовать как минимум двойное резервирование, что означает, что вам понадобится четыре диска и raidz2. С простым двусторонним зеркалом, если один диск выходит из строя, у вас не будет избыточности, если вы восстановите его, напрямую заменив неисправный диск. У вас также нет резервов, пока вы ждете прибытия замены.(Если бы у вас уже была замена, вы бы сделали ее запасной, верно? Верно? )

Есть только одно ограниченное исключение из этого, когда у вас есть свободный слот в вашей системе хранения, зеркала ZFS позволяют добавить замену N-стороннему зеркалу, временно сделав его N + 1-сторонним зеркалом. Затем процесс восстановления ZFS имеет возможность проверять хорошие блоки на плохом диске на наличие плохих блоков на диске, который, по вашему , все еще исправен. Однако это работает только с дисками, дающими мягкие ошибки. Если диск сильно выйдет из строя,вы вернулись к избыточности N-1, которая не является избыточностью, если N было 2.

Купить второй диск емкостью 8 ТБ и отразить его? (самый дорогой)

Из ваших трех вариантов я бы выбрал именно этот, поскольку расширение пулов ZFS с помощью наборов зеркал - самый простой вариант. Это дает вам возможность легко перейти на 3-сторонние зеркала, в то время как невозможно перейти с raidz1 на raidz2 без восстановления всего пула.

Мне действительно не требуется дублирование вариантов 2 и 3 (доступность), и меня больше интересует поддержание данных (целостность).

Это похоже на различие без разницы, если только вы не уверены на 100% в своей резервные копии. Если есть вероятность, что ваши резервные копии изменились с тех пор, как вы их сделали, или вы не сделали резервную копию одного файла, который вам нужен, ваши недоступные данные не имеют остаточной целостности.

Честно говоря, я рекомендую выполнять резервное копирование избыточных пулов ZFS с помощью другого резервного пула ZFS, иначе как можно доверять резервному копированию?

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

2
16.05.2017, 01:52
1 ответ

Когда вы используете open() для открытия файла (см. man 2 open), вы получаете для него файловый дескриптор (это int в C). Стандартные потоки связаны с дескрипторами 0, 1 и 2, а любой другой поток открытых файлов будет иметь отдельный связанный с ним дескриптор.

Существует ограничение на количество файлов, которые вы можете открыть одновременно, обычно где-то около 512 или 1024 (см. ulimit -Hn для жесткого верхнего предела), и каждый из этих открытых файлов будет иметь файловый дескриптор, связанный с ними.

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


В журнале, который вы добавили к вопросу, вы видите, что «отрицательные файловые дескрипторы» связаны с кодами ошибок (ENOENT и EACCESS). Системный вызов open() возвращает отрицательные числа для ошибок.

Описание этих кодов ошибок см. в man errno.

Файловые дескрипторы предназначены для каждого процесса, поэтому файловый дескриптор 6 в процессе A не является тем же потоком, что и файловый дескриптор 6 в процессе B.

3
27.01.2020, 22:10

Теги

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