Робота із файловою системою.

Основи роботи з Linux. -> Робота із файловою системою.

Файлова система

Структура диска.

Жорсткий диск, флешка, ssd це все має блокову організацію даних.

LBA (англ. Logical block addressing) - стандартизований механізм адресації та доступу до блоку даних.

При якому системному контролеру не потрібно враховувати специфіку накопичувача (наприклад, геометрію жорсткого диска — кількість циліндрів, головок, секторів на доріжці).

Жорсткий диск не вміє адресувати свій простір побайтно, умовно він розбитий на блоки.

У LBA кожному блоку, що адресується, призначається унікальний номер — ціле число, починаючи з нуля.

Розмір блоку у звичайних дисках = 512 байт

start page

Як очевидно з малюнка, блоки LBA позначено як рівень HDD.

Переглянути розмір блоку.

sudo blockdev --getpbsz /dev/sdb

Рівнем вище розміщено розділ, один на весь диск (для простоти).

Найчастіше використовують розмітку розділів двох типів: msdos та gpt. Відповідно msdos – старий формат, що підтримує диски до 2Tb, gpt – новий формат, здатний адресувати до 1 зеттабайта 512 байтних блоків. У нашому випадку маємо розділ типу msdos, як видно з малюнка, розділ при цьому починається з блоку №1, а нульовий використовується для MBR.

sudo tune2fs -l /dev/sdb6

У першому розділі створено файлову систему ext4

Подивитися розмір блоку файлової системи можна так:

tune2fs -l /dev/sdb6

start page

Файл складається з одного або кількох блоків файлової системи, де зберігаються його дані. Знаючи ім’я файлу як його знайти? Які блоки читати?

Ось тут нам і знадобляться inode. У файловій системі ext2fs є “таблиця”, в якій міститься інформація по всіх inode. Кількість inode у разі ext2fs задається при створенні файлової системи.

В inode міститься потрібна нам інформація: список блоків файлової системи для файлу, що шукається. Як знайти номер inode для вказаного файлу?

Відповідність імені та номера inode міститься в директорії, а директорія в ext2fs – це файл особливого типу, тобто. теж має власний номер inode. Щоб розірвати це хибне коло, для кореневої директорії призначили «фіксований» номер inode «2».

Дивимося вміст inode за номером 2:

sudo debugfs /dev/sdb6
debugfs:  stat <2>

start page

Як видно, потрібна нам директорія сидить у блоці під номером 9293.

У ній ми знайдемо номер нода для папки home, і так далі по ланцюжку, доки не побачимо номер нода для файлу.

Корисні команди

Команди перегляду всіх блокових пристроїв (дисків)

sudo lsblk

sudo fdisk -l

Інформація про пристрої

sudo lshw

З’ясовуємо ідентифікатор пристрою UUID

sudo blkid

Монтування пристрою в папку

sudo mount -t vfat /dev/sdb1 /media/usbstick

sudo mount /dev/hda1 /home/user/Desktop/whereEver

Монтування диска під час запуску системи

Створюємо каталог для монтування, під нього групу та встановлюємо права для каталогу групі.

sudo mkdir /data
sudo groupadd data
sudo chown -R :data /data

Додаємо поточного користувача до групи.

sudo usermod -aG data USERNAME

Відкриваємо конфіг.

sudo nano /etc/fstab

Додаємо.

UUID=14D82C19D82BF81E /data    auto nosuid,nodev,nofail,x-gvfs-show 0 0

UUID=14D82C19D82BF81E - is the UUID of the drive. You don’t have to use the UUID here. You could just use /dev/sdj, but it’s always safer to use the UUID as that will never change (whereas the device name could). /data - is the mount point for the device.

auto - automatically mounts the partition at boot

nosuid - specifies that the filesystem cannot contain set userid files. This prevents root escalation and other security issues.

nodev - specifies that the filesystem cannot contain special devices (to prevent access to random device hardware).

nofail - removes the errorcheck.

x-gvfs-show - show the mount option in the file manager. If this is on a GUI-less server, this option won’t be necessary.

0 - determines which filesystems need to be dumped (0 is the default).

0 - determine the order in which filesystem checks are done at boot time (0 is the default).

Тестуємо монтування.

sudo mount -a

Форматування

Спочатку варто відмонтувати диск.

sudo umount /dev/sdc1

Забиваємо всі нулями

dd if=/dev/zero of=/dev/[disk device]

Форматуємо у fat

sudo mkfs.vfat /dev/sdc1

Форматуємо у ntfs

sudo mkfs.ntfs /dev/sdc1

Форматуємо в ext4

sudo mkfs.ext4 /dev/sdc1

Видалення таблиці розділів

sfdisk --delete /dev/sda

Створення образу диска

sudo dd if=/dev/mmcblk0p2 of=~/disk/backup.img

где /dev/mmcblk0p2 - диск наприклад флеш накопичувач

Розкочування образу на диск

 sudo dd if=~/disk/backup.img of=/dev/mmcblk0p2

СТВОРЕННЯ SQUASHFS ОБРАЗУ

Перевага Squashfs в тому, що це повноцінна файлова система в одному файлі, яку можна дуже швидко примонтувати та швидко вийняти потрібні файли.

sudo mksquashfs / /root-backup.sqsh -e root-backup.sqsh home media dev run mnt proc sys tmp