Принципи управління системою операційна система і пристрої - стиснення даних

Примітка: Стиснення даних застосовується тільки в JFS.

Журналізірованная файлова система (JFS) підтримує фрагментовані і стислі файлові системи. У цих типах файлових систем економія дискової пам'яті досягається за рахунок того, що розмір мінімального логічного блоку (фрагмента) файлу на диску менше, ніж розмір фізичного блоку (4 Кб). У фрагментованою файлової системи в таких фрагментах зберігаються тільки останні логічні блоки файлів розміром не більше 32 Кб. У стислій файлової системи в таких фрагментах можуть зберігатися все блоки файлів будь-якого розміру. В середньому за рахунок стиснення даних економиться приблизно 50% дискової пам'яті.

Застосування фрагментів і стиснення даних, проте, підвищує ризик фрагментації дискового простору. Фрагменти, виділені логічного блоку, повинні займати безперервну область пам'яті. У файлової системи з фрагментованим вільним простором іноді буває важко вибрати достатню кількість вільних суміжних сегментів, необхідних для розміщення логічного блоку, навіть великому загальній кількості вільних фрагментів. У JFS для вирішення проблеми фрагментації застосовується програма defragfs. яка об'єднує вільні блоки в послідовні ланцюжки. За допомогою цієї утиліти можна збільшити обсяг безперервної вільної пам'яті в фрагментованих і стислих файлових системах. Економія дискової пам'яті за рахунок застосування фрагментів і стиснення даних досить велика, щоб можна було змиритися з фрагментованістю файлової системи, яку завжди можна усунути.

Алгоритми стиснення файлів в поточній версії JFS сумісні з попередніми версіями даної операційної системи. Інтерфейс програмування (API), в який включені всі системні виклики, пов'язані зі стисненням даних, залишився в новій версії JFS без змін.

Додаткова інформація про підтримку фрагментів, використанні дисків, фрагментації вільного простору і вплив фрагментації на продуктивність приведена в розділі Підтримка фрагментів і змінного числа I-вузлів.

Примітка: Стиснення даних застосовується тільки в JFS.

Увага: Коренева файлова система (/) не може бути стиснута. Крім того, не рекомендується стискати файлову систему / usr. оскільки програма installp повинна мати можливість точно визначати обсяг дискового простору, необхідного для установки оновлень і нових компонентів програмного забезпечення. Додаткова інформація про обчислення обсягу дискового простору наведена в розділі Особливості стислих файлових систем.

Стиснення даних - це атрибут файлової системи, що задається при її створенні за допомогою команди crfs або mkfs. Стиснення даних застосовується тільки для звичайних файлів і довгих символьних зв'язків. Фрагменти як і раніше підтримуються при роботі з каталогами та метаданими, стиснення яких не виконується. Кожен логічний блок файлу стискається незалежно від інших перед записом на диск. Такий підхід забезпечує максимальну швидкість вибірки і поновлення даних, хоча ефективність стиснення дещо знижується (в порівнянні із стисненням великих блоків даних).

Після стиснення логічного блоку зазвичай потрібно менше 4096 байт дискового простору. Стиснутий блок записується на диск, і для нього виділяється безперервний блок пам'яті, що складається з мінімального достатнього числа фрагментів. Якщо логічний блок не вдається стиснути, то він записується на диск без стиснення і для нього виділяється безперервний блок пам'яті розміром 4096 байт.

Примітка: Наведена в цьому розділі інформація відноситься тільки до JFS.

Оскільки після успішного завершення операції запису (або збереження - при використанні файлів розміщення) програма, що записує файл, не очікує виникнення помилки, пов'язаної з недостатнім вільним простором на диску (ENOSPC), необхідно забезпечити обсяг вільного простору, достатній для запису логічних блоків на диск. Така гарантія забезпечується виділенням 4096 байт на кожен логічний блок при першому його зміні, що дозволяє записати навіть не стиснений блок. Якщо виділити вільну ділянку пам'яті розміром 4096 байт неможливо, то система повертає повідомлення про помилку ENOSPC або EDQUOT, навіть в тому випадку, якщо фактичний обсяг вільного дискового простору достатній для розміщення стисненого логічного блоку. Тому у випадках, коли в файлової системі дуже мало вільної пам'яті, а також коли користувач витратив майже всю виділену йому пам'ять, можуть видаватися помилкові повідомлення про те, що недостатньо дискової пам'яті.

Крім передчасної видачі повідомлень про те, що недостатньо дискової пам'яті, стислі файлові системи мають наступні особливості:
  • Оскільки спочатку для логічного блоку виділяється 4096 байт, звернення до деяких системних викликів може привести до отримання повідомлення про помилку ENOSPC або EDQUOT. Наприклад, старий файл міг бути розміщений за допомогою системного виклику mmap. і операція збереження в попереднє розташування може привести до отримання повідомлення про помилку ENOSPC. Якщо межа даних не потрапляє на кордон логічного блоку, то звернення до системного виклику ftruncate також може привести до отримання повідомлення про помилку ENOSPC або EDQUOT.
  • При використанні стиснення даних дисковий блок залишається виділеним змінюваному блоку аж до моменту запису на диск. Якщо раніше змінюваний блок займав менше пам'яті, ніж повний фізичний блок, то спочатку йому додатково виділяється повний фізичний блок, потім змінений блок стискається і записується на диск, і тільки після цього звільняється блок, зайнятий раніше. У звичайній фрагментованою файлової системи в кожному файлі може міститися лише один логічний блок, що займає менш однієї фізичної блоку. У стислій файлової системи такими можуть бути всі логічні блоки.
  • Жоден з ресурсів, раніше виділених логічного блоку, не звільняється до тих пір, поки програма не звернутися до системного виклику fsync або sync.
  • Системний виклик stat дозволяє визначити кількість фрагментів, виділених для файлу. Це число обчислюється за наступною схемою: до числа фрагментів, зайнятих блоками, додається число фрагментів дискової пам'яті, виділеної зміненим і ще не записаним блокам. Кожному такому блоку виділяється повний фізичний блок розміром 4096 байт. Ресурси, виділені раніше, не враховуються системним викликом stat. Після фіксації i-вузла виклик stat повертає правильне кількість виділених фрагментів в тому випадку, якщо жоден з змінених блоків не був стиснутий. Зверніть увагу: перевірка обмежень на дискову пам'ять виконується без урахування того, що деякі фрагменти зайняті тільки тимчасово і будуть звільнені. При використанні стиснення по мірі запису логічних блоків на диск кількість виділених фрагментів знижується, що призводить до зміни використовуваного дискового простору і результатами виклику stat.

Примітка: Наведена в цьому розділі інформація відноситься тільки до JFS.

Стиснення даних тепер підтримується командами crfs. mkfs і lsfs. У них, а також в програмі SMIT, передбачені додаткові опції, що дозволяють задавати режим стиснення даних для файлової системи.

Примітка: Наведена в цьому розділі інформація відноситься тільки до JFS.

Прапор -q команди lsfs дозволяє визначити поточне значення атрибута стиснення даних.

Примітка: Наведена в цьому розділі інформація відноситься тільки до JFS.

Попередні версії цієї операційної системи сумісні з поточною версією JFS. Сумісність дискових образів з попередніми версіями операційної системи дозволяє монтувати файлові системи і звертатися до них без виконання будь-яких перетворень і без зниження продуктивності файлових систем.

Примітка: Наведена в цьому розділі інформація відноситься тільки до JFS.

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

Примітка: Наведена в цьому розділі інформація відноситься тільки до JFS.

У AIX застосовується розроблений в IBM алгоритм стиснення на базі стандартного алгоритму LZ. Алгоритм LZ стискає дані шляхом заміни другого і всіх наступних входжень певного рядка на покажчик, що задає перше входження рядка, і її довжину. На початку процедури стиснення в базі даних повторюваних рядків немає жодного рядка, тому як мінімум перший байт даних не буде "стиснутий" і буде записаний у вихідний рядок в початковому вигляді (при цьому до нього додається сигнальний біт і символ займає вже 9 біт - 0 і вихідний байт). Після стиснення певного обсягу даних, домустім N байт, програма стиснення починає шукати найдовшу рядок, яка зустрічається в цих N байтах, і з якої починається наступний необроблений байт. Якщо довжина знайденої рядки дорівнює 0 або 1, то наступний байт не кодують і записується в початковому вигляді (з сигнальним бітом). В іншому випадку збігається рядок замінюється на пару (покажчик, довжина), а процедура стиснення триває з байта N + L + 1, де L - довжина збігається рядки. У модифікації алгоритму LZ фірми IBM для N підтримуються значення 512, 1024 і 2048. У алгоритмі IBM LZ зафіксовано кодування пар (покажчик, довжина) і звичайних символів. Покажчик - це поле фіксованої довжини розміром log2 N. а довжина кодується полем змінної довжини.

Примітка: Наведена в цьому розділі інформація відноситься тільки до JFS.

Оскільки стиснення даних входить до складу засобів підтримки фрагментів, то всі міркування про продуктивності, пов'язані з фрагментами, застосовні і до стиснення даних. Крім того, стиснення даних надає наступну вплив на продуктивність файлової системи:
  • Стиснення і розгортання даних може вимагати істотних тимчасових витрат, тому застосування стислих файлових систем обмежена лише певними робочими середовищами.
  • Більшість звичайних файлів UNIX записуються тільки один раз, але деякі файли оновлюються. При зміні файлу для кожного оновлюваного логічного блоку додатково виділяється 4096 байт фізичної дискової пам'яті, незалежно від того, скільки пам'яті цей блок буде займати після стиснення. Перерозподіл пам'яті відбувається після остаточної записи стисненого логічного блоку на диск. Всі ці дії не потрібно виконувати для незжатих файлових систем.
  • Застосування стиснення даних підвищує рівень використання процесора. Програмне стиснення даних вимагає приблизно 50 тактів процесора на байт, а розгортання - приблизно 10 тактів на байт.

Схожі статті