Як використовувати команду mkfs в Linux

Перш ніж ви зможете використовувати будь-який накопичувач, під’єднаний до комп’ютера з Linux, його необхідно підготувати, створивши файлову систему. Розглянемо, як це зробити за допомогою утиліти mkfs та інших інструментів для різноманітних типів файлових систем.

Створення файлових систем за допомогою mkfs

Команда mkfs призначена для створення файлових систем. В інших операційних системах аналогічний процес називається форматуванням. Незалежно від назви, цей процес готує розділ до зберігання даних. Для цього потрібна не тільки структура для зберігання самих файлів, а й механізм для організації імен файлів, їхнього розташування та метаданих, таких як мітки часу створення та модифікації, розмір файлу тощо. Після того, як mkfs створить необхідну структуру, ви зможете додавати файли до розділу.

Синтаксис команди є досить простим: потрібно вказати mkfs розділ, на якому слід створити файлову систему, та її тип. Це, якщо дивитися поверхово. Насправді, під капотом все дещо складніше. У більшості дистрибутивів Linux, mkfs є обгорткою для mke2fs. Тобто, команда mkfs викликає mke2fs, передаючи їй задані параметри. Саме mke2fs виконує основну роботу, залишаючись при цьому в тіні.

Синтаксис mkfs було модернізовано, а старий формат став застарілим. Обидва варіанти працюють, але в цій статті ми будемо використовувати сучасний підхід.

Вибір файлової системи

Сучасний спосіб використання mkfs передбачає введення “mkfs”, а потім назву файлової системи, яку ви хочете створити.

Щоб переглянути список доступних файлових систем, введіть “mkfs”, а потім двічі натисніть клавішу Tab. Не потрібно ставити пробіл після “mkfs”, просто двічі натисніть Tab.

У вікні терміналу з’явиться список файлових систем. На скриншоті представлено результат в Ubuntu 18.04 LTS. В інших дистрибутивах кількість варіантів може відрізнятися. Розглянемо їх детальніше, а перед цим поговоримо про журналювання.

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

Ext2: Першою файловою системою для Linux була MINIX. Пізніше її замінила Ext (Extended file system) – перша файлова система, розроблена спеціально для Linux. Ext2 був наступником Ext. Ext2 не є журнальною файловою системою.

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

Ext4: Стандартна файлова система для багатьох дистрибутивів Linux. Надійна, перевірена та стабільна файлова система. Має функції для зменшення фрагментації файлів та підтримує більші диски, розділи та файли, ніж Ext3.

BFS: Це файлова система завантаження, розроблена для роботи виключно з файлами у завантажувальному розділі. Рідко виникає потреба у створенні цієї файлової системи вручну. Процес встановлення Linux зробить це за вас.

FAT: Файлова система з таблицею розміщення файлів, розроблена для дискет консорціумом провідних комп’ютерних компаній. З’явилася в 1977 році. Використовується лише через свою сумісність з операційними системами, відмінними від Linux. Не підтримує журналювання.

NTFS: Файлова система New Technology File System – журнальна файлова система Microsoft, представлена в Windows NT. Призначена для заміни FAT. Використовується лише через свою сумісність з операційними системами, відмінними від Linux.

MINIX: Створена Ендрю С. Таненбаумом як навчальний інструмент, MINIX є операційною системою “міні-Unix”. Зараз вона спрямована на забезпечення самовідновлення та відмовостійкої роботи. Файлова система MINIX є спрощеною версією файлової системи Unix. Може знадобитися, якщо ви займаєтесь крос-розробкою на Linux для платформи MINIX або потрібна сумісність з комп’ютером MINIX з інших причин. В інших випадках використання цієї файлової системи на комп’ютері з Linux є малоймовірним, але вона доступна.

VFAT: Віртуальна таблиця розміщення файлів, з’явилася у Windows 95, зняла обмеження на імена файлів у 8 символів. З’явилася можливість використовувати імена файлів до 255 символів. Використовується тільки для сумісності з операційними системами, відмінними від Linux.

CRAMFS: Стиснена файлова система тільки для читання, розроблена для вбудованих систем і спеціалізованого використання тільки для читання, наприклад, у процесах завантаження комп’ютерів Linux. Зазвичай спочатку завантажується невелика тимчасова файлова система для запуску процесів завантаження, щоб підготуватися до монтування “справжньої” системи.

MSDOS: Файлова система Microsoft Disk Operating System. Випущена в 1981 році, це базова, елементарна файлова система. У перших версіях навіть не було каталогів. Має важливе значення в історії обчислень, але, крім сумісності зі застарілими системами, сьогодні немає причин її використовувати.

Безпечний спосіб експериментувати з файловими системами

Створення файлової системи на розділі призводить до знищення даних, які там вже зберігаються. Ідеальним варіантом для експериментів є використання запасного жорсткого диска або навіть окремого комп’ютера. Але, звісно, не у всіх є така можливість.

Проте можна створити файл образу та створювати файлові системи всередині нього. Після монтування ми зможемо використовувати його як звичайний розділ, що дозволить досліджувати різні файлові системи без необхідності у додатковому обладнанні. Для створення файлу образу будемо використовувати команду dd.

Файл образу створюється шляхом отримання вихідних даних та їх запису в образ. Потрібно вказати dd джерело вихідних даних. Для цього будемо використовувати параметр if (input file), щоб вказати dd використовувати /dev/zero як джерело, яке є потоком нулів.

Параметр of (output file) дозволяє задати ім’я файлу образу. Назвемо його “wdzwdz.img”.

Розмір файлу образу визначається розміром та кількістю блоків, які ми до нього додаємо. Параметр bs (block size) дозволяє задати розмір блоку 1 МБ, а параметр count дозволяє задати кількість блоків, у нашому випадку 250, що дасть файлову систему розміром 250 МБ. При виконанні команди, ви можете відрегулювати кількість блоків відповідно до ваших потреб та вільного місця на комп’ютері.

dd if=/dev/zero of=~/wdzwdz.img bs=1M count=250

Файл створено, і dd повідомляє, що 250 блоків було успішно створено.

Переглянути створений файл образу можна за допомогою ls:

ls -hl

Розмір файлу, як і очікувалось, становить 250 МБ.

Створення файлової системи

Виберемо файлову систему. Повернемося назад у часі і використаємо Ext2, найстарішу версію Ext, яку може створити mkfs. Це нежурнальна файлова система, тому не зберігайте там нічого цінного без резервної копії. Використаємо варіант mkfs.ext2 команди mkfs та вкажемо як ціль файл образу.

mkfs.ext2 ~/wdzwdz.img

Файлова система створена, та відображаються деталі про неї.

Як видно з виділеного тексту, з’являється mke2fs.

Тепер у нас є контейнер для файлової системи – файл образу, який в даному випадку замінює жорсткий диск. Всередині цього контейнера ми створили файлову систему. Тепер потрібно змонтувати її, щоб мати змогу використовувати.

Це тимчасова структура, тому створимо точку монтування в /mnt з назвою “geek”. Видалимо її після завершення.

sudo mkdir /mnt/geek

Тепер можемо змонтувати наш файл образу.

sudo mount ~/wdzwdz.img /mnt/geek

Змінимо власника файла точки монтування, щоб мати доступ на читання та запис.

sudo chown dave:users /mnt/geek/

Тепер ми повинні мати можливість використовувати нашу нову файлову систему. Перейдемо до файлової системи та скопіюємо туди файли.

cd /mnt/geek
cp ~/Documents/Code/*.? .

Ця команда скопіює всі файли з односимвольним розширенням з каталогу ~/Documents/Code у нашу нову файлову систему. Перевіримо, чи скопіювалися файли.

ls

Файли скопійовані, отже наша файлова система успішно створена, змонтована та використовується. Або нам так здається. Перевіримо ще раз. З нашого домашнього каталогу розмонтуємо файлову систему. Зверніть увагу, що в слові “umount” лише один “n”.

sudo umount /mnt/geek

Тепер, якщо ми повернемося до /mnt/geek та перевіримо файли, ми не повинні їх знайти, оскільки вони знаходяться всередині нашого файлу образу, який було розмонтовано.

cd /mnt/geek
ls

Подальші дослідження

Тепер, коли ми знаємо процес, спробувати іншу файлову систему має бути легко. Цього разу використаємо файлову систему MINIX. З домашнього каталогу ми можемо створити нову файлову систему всередині нашого існуючого файлу образу.

Будьте обережні! Якщо у файловій системі всередині файлу образу є важливі файли, змонтуйте файл образу та отримайте їх, перш ніж створювати нову файлову систему.

mkfs.minix ~/wdzwdz.image

Без додаткових запитань, нова файлова система створюється поверх старої. Монтуємо наш файл образу так само, як і раніше:

sudo mount ~/wdzwdz.img /mnt/geek

Перейдемо до нової файлової системи в /mnt/geek та подивимося, чи можемо ми створити файл.

touch geek.txt

ls -ahl geek.txt

І так просто та швидко, ми створили нову файлову систему, змонтували її, і ми можемо її використовувати.

Видалення точки кріплення

Коли ви все закінчите, ми можемо видалити точку монтування “geek”. Для цього скористаємось rmdir:

cd /mnt
sudo rmdir geek

Жонглювання з вогнем

З Linux, як і з більшістю речей, ми вчимося на практиці. Проблема полягає в тому, що деякі команди можуть бути небезпечними. Тож виникає дилема, як практикувати їх використання, не наражаючи на ризик свою систему чи дані?

Тепер у вас є простий спосіб створювати та тестувати файлові системи за допомогою mkfs, не завдаючи шкоди вашому комп’ютеру.