Робота із файловою системою.
Основи роботи з Linux. -> Робота із файловою системою.
Файлова система
Структура диска.
Жорсткий диск, флешка, ssd це все має блокову організацію даних.
LBA (англ. Logical block addressing) - стандартизований механізм адресації та доступу до блоку даних.
При якому системному контролеру не потрібно враховувати специфіку накопичувача (наприклад, геометрію жорсткого диска — кількість циліндрів, головок, секторів на доріжці).
Жорсткий диск не вміє адресувати свій простір побайтно, умовно він розбитий на блоки.
У LBA кожному блоку, що адресується, призначається унікальний номер — ціле число, починаючи з нуля.
Розмір блоку у звичайних дисках = 512 байт
Як очевидно з малюнка, блоки 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
Файл складається з одного або кількох блоків файлової системи, де зберігаються його дані. Знаючи ім’я файлу як його знайти? Які блоки читати?
Ось тут нам і знадобляться inode. У файловій системі ext2fs є “таблиця”, в якій міститься інформація по всіх inode. Кількість inode у разі ext2fs задається при створенні файлової системи.
В inode міститься потрібна нам інформація: список блоків файлової системи для файлу, що шукається. Як знайти номер inode для вказаного файлу?
Відповідність імені та номера inode міститься в директорії, а директорія в ext2fs – це файл особливого типу, тобто. теж має власний номер inode. Щоб розірвати це хибне коло, для кореневої директорії призначили «фіксований» номер inode «2».
Дивимося вміст inode за номером 2:
sudo debugfs /dev/sdb6
debugfs: stat <2>
Як видно, потрібна нам директорія сидить у блоці під номером 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