Байт на индексный дескриптор что выбрать
Кое-что об inode
Периодически, с целью переезда в ЦРС собеседуюсь в разных крупных компаниях, в основном Питера и Москвы на должность DevOps. Обратил внимание, что во многих компаниях (во многих хороших компаниях, например в яндексе) задают два сходных вопроса:
Начну «снизу», т.е. с жесткого диска (флешки, SSD и прочие современные штуки отбросим, для примера рассмотрим любой 20 или 80 гиговый старый диск, т.к. там размер блока 512 байт).
Жесткий диск не умеет адресовать свое пространство побайтно, условно оно разбито на блоки. Нумерация блоков начинается с 0. (называется это LBA, подробности тут: ru.wikipedia.org/wiki/LBA)
Как видно из рисунка, блоки LBA я обозначил как уровень HDD. К слову, посмотреть, какой размер блока у вашего диска можно так:
Уровнем выше размечен раздел, один на весь диск (опять же для простоты). Чаще всего используют разметку разделов двух типов: msdos и gpt. Соответственно msdos — старый формат, поддерживающий диски до 2Tb, gpt — новый формат, способный адресовать до 1 зеттабайта 512 байтных блоков. В нашем случае имеем раздел типа msdos, как видно из рисунка, раздел при этом начинается с блока №1, нулевой же используется для MBR.
В первом разделе я создал файловую систему ext2, по умолчанию размер блока у нее 4096 байт, что также отражено на рисунке. Посмотреть размер блока файловой системы можно так:
Нужный нам параметр — «Block size».
Теперь самое интересное, как прочитать файл /home/serp/testfile? Файл состоит из одного или нескольких блоков файловой системы, в которых хранятся его данные. Зная имя файла, как его найти? Какие блоки читать?
Вот тут нам и пригождаются inode. В файловой системе ext2fs есть «таблица», в которой содержится информация по всем inode. Количество inode в случае с ext2fs задается при создании файловой системы. Нужные цифры смотрим в параметре «Inode count» вывода tune2fs, т.е. имеем 65536 штук. В inode содержится нужная нам информация: список блоков файловой системы для искомого файла. Как найти номер inode для указанного файла?
Соответствие имени и номера inode содержится в директории, а директория в ext2fs — это файл особого типа, т.е. тоже имеет свой номер inode. Чтоб разорвать этот порочный круг, для корневой директории назначили «фиксированный» номер inode «2». Смотрим содержимое inode за номером 2:
Как видно, нужная нам директория содержится в блоке с номером 579. В ней мы найдем номер нода для папки home, и так далее по цепочке, пока в директории serp не увидим номер нода для запрошенного файла. Если вдруг кому то захочется проверить, верный ли номер, и есть ли там нужная инфа, это не сложно. Делаем:
В выводе можно прочитать имена файлов в директории.
Вот я и подошел к главному вопросу: «по каким причинам может возникнуть ошибка записи»?
Естественно так случится, если не останется свободных блоков файловой системы. Что можно в этом случае сделать? Кроме очевидного «удалить что-нибудь ненужное», следует помнить, что в файловых системах ext2,3 и 4 есть такая штука, как «Reserved block count». Если посмотреть в листинге выше, то у нас таких блоков «13094». Это блоки доступные для записи только пользователю root. но если нужно оперативно решить вопрос, как временное решение можно сделать их доступными для всех, в результате чего появится немного свободного места:
Т.е. по умолчанию, у вас не доступно для записи 5% дискового пространства, и учитывая объемы современных дисков, это могут быть сотни гигабайт.
Что еще может быть? Еще возможна ситуация, когда свободные блоки есть, а ноды кончились. Такое обычно случается, если у вас в файловой системе куча файлов размером меньше размера блока файловой системы. Учитывая, что на 1 файл или директорию тратится 1 inode, а всего их имеем (для данной файловой системы) 65536 — ситуация более чем реальная. Наглядно это можно увидеть из вывода команды df:
Как хорошо заметно на разделе /var/www, количество свободных блоков файловой системы, и количество свободных нодов сильно различается.
На случай если кончились inode, заклинаний не подскажу, т.к. их нет (если не прав, дайте знать). Так что для разделов в которых плодятся мелкие файлы следует грамотно выбирать файловую систему. Так например в btrfs inode не могут закончиться, т.к. динамически создаются новые при необходимости.
PC360
Ремонт/настройка ПК и окружающих его устройств.
Сетевое хранилище QNAP TS-431 P2 для видеонаблюдения. Настройка.
По задуманному плану хранилище устанавливается в серверной и круглосуточно записывает 15-20 камер. По необходимости, удаленный пользователь, подключенный к этой же локальной сети, может просмотреть видеозаписи через установленное у него клиентское приложение. Получилась схема, представленная ниже.
Хранилище установлено и подключено к локальной сети. В него вставлены 4 HDD WD Purple 2GB Подробнее об этом можно узнать из предыдущего поста.
Далее настройки выполняются на удаленном компьютере с ОС Windows.
Задача состоит в создании из четырех установленных HDD массива RAID10, разбивка его на Тома и создание сетевого ресурса, на который будет вестись запись камер видеонаблюдения.
Для нахождения NAS в сети необходимо скачать и установить приложение от разработчика QNAP Qfinder.
В нашей сети работает DHCP и тут непонятно раздался IP-адрес или он был вписан в NAS изначально, в любом случае Qfinder должен найти хранилище.
При первом подключении запускается мастер по установке. Можно пройти по нему под спойлером.
Нажимая кнопку «Да» мы переместимся в браузер, где будет предложено установить обновление ПО сетевого хранилища.
ПО автоматически скачивается из интернета, затем устанавливается и сетевое хранилище перезагрузится. Весь процесс занял около 15мин. Хранилище иногда издавало звуковые сигналы.
Далее предлагается ввести имя сетевого хранилища и пароль администратора. Вводим пароль из букв, цифр и спец. символов разного регистра.
На следующем шаге мастера указываем часовой пояс и время. >>Далее.
Вводим удобный нам IP-адрес, маску, шлюз и DNS. >>Далее.
Выбираем сервис кросс-платформенной передачи файлов. У нас Windows.
Проверяем еще раз выбранные настройки и нажимаем кнопку «Применить».
Ожидаем некоторое время, пока настройки активизируются.
Все эти же настройки можно выполнить в интерфейсе Qfinder.
После выполнения настроек QNAP переадресует нас в браузер к интерфейсу сетевого хранилища. Вводим созданный ранее пароль администратора и нажимаем кнопку «Войти».
Прочитав несколько уведомлений о конфиденциальности, попадаем в главное меню. Переходим в панель управления.
В разделе общие настройки можно изменить все то, что делалось через мастера и еще больше.
Нам необходимо настроить HDD, поэтому переходим во второй пункт меню «Хранение и моментальные снимки». Сразу в это меню можно попасть так же из главного меню начального экрана.
При входе в новый модуль программы первый раз открывается помощник конфигурирования. Можно его использовать либо закрыть. Нажимаем «Далее»
Откроется мастер создания пула хранения – это то, что нам нужно. Создадим Пул.
Альтернативный вариант начать создание пула: переходим в меню «Хранение и моментальные снимки», нажимаем на значек с хранилищем в правой части окна, как на картинке ниже.
На втором шаге мастера создания пула хранения нужно определить необходимые диски и тип RAID. Как видно, система позволяет создать JBOD, RAID0, RAID5, RAID6, RAID10. Выбираем в нашем случае все диски и RAID10. >>Далее.
Порог тревоги для нашего случая лучше выбрать более 90%. >>Далее.
Я выбрал 80%, в последствие стало понятно, что это не очень удачный выбор для видеонаблюдения. При занятости диска более 80% постоянно висит предупреждение в ПО, а на самом хранилище индикатор Status постоянно горит красным. Если случится какая-то другая поломка, связанная с сигнализацией красного света, то её не будет заметно. Наилучшим вариантом для видеонаблюдения будте совсем отключить порог тревоги.
Проверяем введенные параметры, нажимаем кнопку «Создать».
Через некоторое время на экране появится подтверждение об удачно созданном пуле.
Посмотреть состояние созданного массива можно на вкладке «Управлять».
Созданный пул это неразмеченное дисковое пространство. Нам нужно разделить его на логические Тома или LUNы (Logical Unit Number).
В случае с LUN пользователю будет предоставлятся кусок дискового пространства. (ВИКИПЕДИЯ сообщает, что: Созданием в этом дисковом пространстве, предоставленном хранилищем, дисковых разделов, файловых систем и размещением файлов занимается уже тот сервер, которому был презентован этот LUN. Само хранилище знает только о LUN’ах, и не знает ничего о более высокоуровневых логических структурах на этом диске (типа файловых систем и файлов).
При создании Тома пользователь будет видеть разрешенный ему общий ресурс со структурой папок. В качестве пользователя в нашем случае будут выступать видеокамеры. Поэтому, для видеонаблюдения выберем разбивку на Тома.
Далее порядок действий следующий:
— создаем отдельный том для каждой видеокамеры;
— в созданном томе создаем сетевую папку и настраиваем её права;
— назнчаем видеокамеры на созданные папки;
Создание тома.
В разделе «Хранение и моментальные снимки» выбираем кнопку «Создать» >> Новый том.
Выбираем полный том. >>Далее.
*расположение по умолчанию – накопитель хранилища 1
Подробности о назначениях видов томов можно прочитать в инструкции с сайта разработчика NAS. или тут.
Настройка раздела «Выбранные диски» в случае выбора полного тома не выполняется и проскакивает.
Следующим шагом выбираем объем будущего том. Практика показывает, что заполнение дискового пространства зависит от интенсивности записи камеры, качества видео и битрейта, типа кодека. К примеру, на одну из камер был назначен диск 50Гб, а сама камера записывала непрерывно круглосуточно в высоком разрешении. В этом случаее дискового пространства хватило на 11 дней записи и далее пошла перезапись. У другой камеры, расположенной в месте с неособо интенсивным движением был выставлен режим записи «По событию» и средее качество видео и битрейта, объем диска 100Гб. В этом случае перезапись пошла через 37 дней. Минимальный срок хранения видеоархива по нашим стандартам должен составлять 30 дней. Из этого соображения для большинства камер выбран объем Тома 100Гб.
Выбираем имя тома, объем, кол-во байт на индексный дескриптор (8К).
В расширенной настройке можно изменить порог тревоги на 90-95% или лучше его вообще выключить.
Так же тут можно создать общую папку или сделать это позже.
Проверяем настройки, нажимаем кнопку «Выполнено».
Через некоторое время ожидания новый том будет создан.
Создание сетевого ресурса.
Переходим к созданию общего сетевого ресурса. Это можно сделать из из File Station, Панели управления (общие папки) или как в предыдущем пункте, во время создания Тома. Создадим ресурс из меню «Общие папки».
Панель управления >> Общие папки >> Создать >> Общая папка.
Указываем имя папки и выбираем Том. Путь к папке особого значения не имеет. Оставляем задание пути автоматически.
Имя папки поясняет к какой видеокамере она относится. Это особенно полезно, когда камер много.
В настройке прав доступа и расширенной настройке все параметры по умолчанию (ничего не меняем).
Нажимаем кнопку «Создать».
В результате этих действий сетевая папка будет создана. Можно в этом убедится, увидев её в меню настроек или перейти в NAS через сетевой путь. Из папки лучше сразу все удалить. Для видеокамер HIKVISION важно чтоб папка была пустой.
Назначаем права доступа к папке, нажав на соответствующую иконку.
Выставляем следующие настройки для выбранной папки:
Выбрать тип разрешения: Доступ к узлу NFS.
Доступ – отмечаем галочкой.
Узел/IP/Сеть — * (для доступа из любого соединения)
Функция SQUASH – ROOT_SQUASH.
Жмем кнопку «Применить».
Если нужно подключить еще одну камеру – создаем еще один Том и добавляем в него сетевую папку с именем камеры. Таким способом можно добавить столько видеокамер сколько необходимо.
Настройка видеокамер.
Камеры Hikvision DS-2CD2420F-I, DS-2CD2120F-I и DS-2CD2143G0-IS подключены в локальную сеть и настроены по инструкции. В функционале камер DS-2CD2123G0-IS отсутствует поддержка NAS, хотя в нашей сети они тоже присутствуют.
Настройку камер можно выполнить через установленного клиента IVMS-4200 или через браузер. Воспользуемся вторым способом. Он более удобный.
В адресной строке браузера IE набираем IP-адрес камеры, в нашем случае это 192.168.0.119 и авторизируемся с правами администратора.
Переходим в раздел меню «Настройки»
В боковом меню выбираем:
Хранение >> Управление хранением >> Сетевой HDD.
— путь к папке для камеры /IPCAM119;
— тип установки — NFS (не требуется логин-пароль).
Нажимаем кнопку «Сохранить».
Можно нажать кнопку «Тест». При правильно введенных настройках появится сообщение:
Переходим на соседнюю вкладку – «Управление жесткими дисками».
Отмечаем галочкой строчку HDD со статусом – Неинициализирован
Нажимаем кнопку «Формат».
Время форматирования зависит от объема жесткого диска. 3,5Тб форматируются больше часа. 100Гб форматируются несколько минут.
Во время форматирования ПО создает на указанном сетевом ресурсе необходимые для работы папки и заполняет их файлами (контейнерами) для будущих видеозаписей.
После нажатия кнопки «Сохранить» начнется видеозапись в NAS в соответствии с установленным расписанием.
Расписание настраивается на вкладке бокового меню «Хранение» >> «Параметры расписания». По умолчанию расписание активировано и на все дни установлена запись «По событию».
Чтоб камера начинала записывать по событию нужно активировать детектор движения. Сделать это можно в меню на вкладке «По событию» >> «Детектор движения». Поставить галочку – «Включить детекцию движения» и нажать кнопку «Сохранить».
Просматривать записи камер можно на вкладке «Архив» верхнего меню. Выбираем дату в календаре и в нижней полоске видим время записи (розовым – по событию). Удобнее смотреть записи из клиента IVMS-4200 т.к. присутствует увеличение скорости воспроизведения х8.
Представленная схема работает в нашей организации уже почти год. В NAS записывается более 10 камер. Инструкция исправлена и дополнена 12.10.2020г.
Индексные дескрипторы
Индексный дескриптор, или inode, содержит информацию о файле, необходимую для обработки данных, т.е. метаданные файла. Каждый файл ассоциирован с одним inode, хотя может иметь несколько имен в файловой системе, каждое из которых указывает на один и тот же inode.
Индексный дескриптор не содержит:
? имени файла, которое содержится в блоках хранения данных каталога;
? содержимого файла, которое размещено в блоках хранения данных.
При открытии файла ядро помещает копию дискового inode в память в таблицу in-core inode, которая содержит несколько дополнительных полей. Структура дискового inode (struct dinode) приведена на рис. 4.2. Основные поля дискового inode следующие:
di_mode Тип файла, дополнительные атрибуты выполнения и права доступа. di_nlinks Число ссылок на файл, т.е. количество имен, которые имеет файл в файловой системе. di_uid, di_gid Идентификаторы владельца-пользователя и владельца- группы. di_size Размер файла в байтах. Для специальных файлов это поле содержит старший и младший номера устройства. di_atime Время последнего доступа к файлу. di_mtime Время последней модификации. di_ctime Время последней модификации inode (кроме модификации полей di_atime, di_mtime). di_addr[13] Массив адресов дисковых блоков хранения данных.
Рис. 4.2. Структура дискового inode
Поле di_mode хранит несколько атрибутов файла: тип файла (IFREG для обычных файлов, IFDIR для каталогов, IFBLK или IFCHR для специальных файлов блочных и символьных устройств соответственно); права доступа к файлу для трех классов пользователей и дополнительные атрибуты выполнения (SUID, SGID и sticky bit), значения этих атрибутов были подробно рассмотрены в главе 1.
Заметим, что в индексном дескрипторе отсутствует информация о времени создания файла. Вместо этого inode хранит три значения времени: время последнего доступа (di_atime), время последней модификации содержимого файла (di_mtime) и время последней модификации метаданных файла (di_ctime). В последнем случае не учитываются модификации полей di_atime и di_mtime. Таким образом, di_ctime изменяется, когда изменяется размер файла, владелец, группа, или число связей.
Индексный дескриптор содержит информацию о расположении данных файла. Поскольку дисковые блоки хранения данных файла в общем случае располагаются не последовательно, inode должен хранить физические адреса всех блоков, принадлежащих данному файлу.[46] В индексном дескрипторе эта информация хранится в виде массива, каждый элемент которого содержит физический адрес дискового блока, а индексом массива является номер логического блока файла. Массив имеет фиксированный размер и состоит из 13 элементов. При этом первые 10 элементов адресуют непосредственно блоки хранения данных файла. Одиннадцатый элемент адресует блок, в свою очередь содержащий адреса блоков хранения данных. Двенадцатый элемент указывает на дисковый блок, также хранящий адреса блоков, каждый из который адресует блок хранения данных файла. И, наконец, тринадцатый элемент используется для тройной косвенной адресации, когда для нахождения адреса блока хранения данных файла используются три дополнительных блока.
Такой подход позволяет при относительно небольшом фиксированном размере индексного дескриптора поддерживать работу с файлами, размер которых может изменяться от нескольких байтов до десятка мегабайтов. Для относительно небольших файлов (до 10 Кбайт при размере блока 1024 байтов) используется прямая индексация, обеспечивающая максимальную производительность. Для файлов, размер которых не превышает 266 Кбайт (10 Кбайт + 256?1024), достаточно простой косвенной адресации. Наконец, при использовании тройной косвенной адресации можно обеспечить доступ к 16777216 блокам (256?256?256).
Файлы в UNIX могут содержать так называемые дыры. Например, процесс может создать пустой файл, с помощью системного вызова lseek(2) сместить файловый указатель относительно начала файла и записать данные. При этом между началом файла и началом записанных данных образуется дыра — незаполненная область. При чтении этой области процесс получит обнуленные байты. Поскольку логические блоки, соответствующие дыре, не содержат данные, не имеет смысла размещать для них дисковые блоки. В этом случае соответствующие элементы массива адресов inode содержат нулевой указатель. Когда процесс производит чтение такого блока, ядро возвращает последовательность нулей. Дисковые блоки размещаются только при записи в соответствующие логические блоки файла.[47]
Данный текст является ознакомительным фрагментом.
Продолжение на ЛитРес
Читайте также
4.4.2.1. Отображение переменных FILE* на дескрипторы файлов
Наследуемые дескрипторы
Наследуемые дескрипторы Часто бывает так, что дочернему процессу требуется доступ к объекту, к которому можно обратиться через дескриптор, определенный в родительском процессе, и если этот дескриптор — наследуемый, то дочерний процесс может получить копию открытого
Абсолютные и самоопределяющиеся относительные дескрипторы безопасности
Абсолютные и самоопределяющиеся относительные дескрипторы безопасности Программа 15.5, позволяющая изменять ACL, удобна тем, что просто заменяет один дескриптор безопасности (SD) другим. В то же время, при замене существующих SD следует проявлять осторожность, поскольку они
11.2.1. Файловые дескрипторы
11.2.1. Файловые дескрипторы Когда процесс получает доступ к файлу (что обычно называют открытием файла), то ядро возвращает ему файловый дескриптор, который затем используется процессом для всех операций с файлом. Файловые дескрипторы — это маленькие положительные целые
Индексные дескрипторы
Индексные дескрипторы Индексный дескриптор, или inode, содержит информацию о файле, необходимую для обработки данных, т.е. метаданные файла. Каждый файл ассоциирован с одним inode, хотя может иметь несколько имен в файловой системе, каждое из которых указывает на один и тот же
Виртуальные индексные дескрипторы
Виртуальные индексные дескрипторы Дисковый файл обычно имеет связанную с структуру данных, называемую метаданными или inode, где хранятся основные характеристики данного файла и с помощью которой обеспечивается доступ к его данным. Одним из исключений из этого правила
Файловые дескрипторы
Файловые дескрипторы Файловый дескриптор представляет собой неотрицательное целое число, возвращаемое системными вызовами, такими как creat(2), open(2) или pipe(2). После получения файлового дескриптора процесс может использовать его для дальнейшей работы с файлом, например с
16.3. Индексные дескрипторы файлов
1.1.3. Дескрипторы вместо классов
1.1.3. Дескрипторы вместо классов Программируя в Delphi, мы быстро привыкаем к тому, что каждый объект реализуется экземпляром соответствующего класса. Например, кнопка реализуется экземпляром класса TButton, контекст устройства — классом TCanvas. Но когда создавались первые
7.2.5. Дескрипторы файлов процесса
7.2.5. Дескрипторы файлов процесса Элемент fd файловой системы /proc — это подкаталог, в котором содержатся записи обо всех файлах, открытых процессом. Каждая запись представляет собой символическую ссылку на файл или устройство. Через эти ссылки можно осуществлять чтение и
Индексные выражения
Индексные свойства
Индексные свойства Индексные свойства ведут себя аналогично полям-массивам и используются, как правило, для доступа к элементам контейнеров. Как и при использовании обычных свойств, при использовании индексных свойств могут попутно выполняться некоторые