Диски, разделы, файловые системы в ОС и работа с ними (lsblk, fdisk, dd, df, du, iotop, parted, mkfs, mount, fstab, fsck, clonezilla, life cd&usb)

 

ОПРЕДЕЛЕНИЯ
  • Про объекты данных (напр. LUN) см. статью RAID 
  • FS – File System (файловая система) – Есть файл, есть атрибуты файла (методанные). Для хранения методанных обычно используется специальная таблица (MFT в NTFS, inode в ext), при создании файлов в эту таблицу добавляется запись/записи, при удалении – удаляются. В методанных хранятся данные о идентификатор записи в таблице методанных (file record number, например для создания hard link к файлу), правах доступа к файлу, имя файла (inode не хранит), местоположение файла, сжат/зашифрован ли файл, время редактирования/создания/просмотра и прочая служебная информация. Какие ФС используют современные системы:
    • NTFS – Windows. NTFS использует Master File Table для хранения методанных файлов на volume, можно выбирать размер Allocation Unit в зависимости от размера хранимых данных
    • ext4 (Debian), xfs (RHEL) . Причем Linux поддерживает работу с flash с файловой системой NTFS, а Windows не поддерживает flash с ext4 ?
    • FAT32 – для работы во всех системах рекомендуется flash делать с FAT32 (если не будет файлов более 4гб и размер флешки не более 32гб). 
You want to format a partition with NTFS, and know that the data you'll be storing will consist mostly of many small files. In order to use as little space as possible, should you choose a larger or smaller Allocation Unit Size during the formatting process.

ext4 - the most widely used Linux filesystem type.

The FAT32 filesystem is great for cross-platform compatibility, but has lots of limitations that don't make it useful for large data storage: It doesn't support files larger than 4GB, Its filesystem size can't be larger than 32GB.
  • Defragmentation (Дефрагментация) – перемещение данных одного файла в секторы рядом с друг другом для ускорения работы. Применяется в HDD, чтобы меньше перемещать головку/не ждать еще одного оборота для прочтения. Нужно в большей степени в Windows, в Linux система старается не допустить фрагментации. Делается автоматически на современных версиях Windows. Windows сохраняет файлы как можно ближе к началу свободного пространству volume близко к друг другу (в fat друг за другом, в ntfs с некоторым буфером), тем самым приводя к фрагментации файлов при росте их объема. Linux же (ext2-3-4) не кладет файлы рядом, а раскидывает их по всему диску в некотором рандоме. Кроме того, если Linux не может выделить пространство сразу после текущих секторов файла, он не запишет в другие (далекие) сектора добавленную информацию, а попытается переместить весь файл в последовательность ячеек в которую файл поместится весь. Поэтому фрагментацию в Linux можно встретить только на дисках с загрузкой более 80%. В случае фрагментации на Linux (посмотреть можно в fsck по интигатору “non-contiguous nodes”) простейший способ исправления проблемы – увеличение пространства и перезаливка через удаление существующих файлов.
  • Cleaning– при чистке диска, такой как через службу очистки в Windows, помимо удаления temp/корзины может происходить сжатие редко используемых файлов.
  • Trim – полезная вещь уже для SSD. Позволяет “вернуть в оборот” неиспользуемое пространство диска.
  • Shortcut (в Windows) – это link на основе операционной системы, не на основе файловой системы. Операционка реже рассматривает shortcut как замену файлу в сравнении с link’ами (видно например при попытке открыть такой файл notepad через shell).
  • Symbolic/soft/sym link – link, которые указывает на название файла (при смене названия линк поломается) – файл с новым MFT, который указывает имя другого MFT
Softlinks are used to point to filenames, while hardlinks point to inodes.
     mklink file_slink file.txt #Windows
     ln -s file.txt file_slink # Linux
  • Hard link – link, которые указывает на идентификатор записи в таблице методанных, не на название – файл с новым MFT, который указывает на file record number другого MFT (или на inode запись в Linux, в ls -l можно увидеть сколько hardlink имеет файл в столбце после прав). Очень полезно когда ты хочешь хранить один файл в нескольких местах, но не хочешь занимать место под этот файл.
Softlinks are used to point to filenames, while hardlinks point to inodes.
     mklink /H file_hlink file.txt #Windows
     ln file.txt file_slink # Linux
  • Data buffer – когда мы копируем данные с одного носителя на другой, мы сначала перемещаем их в оперативную память, а уже потом на фактический диск.
  • Data corruption – повреждение данных. Может быть результатом вытащенного без unmount носителя (напр. USB), внезапного отключения электричества, проблемы с системой, баги в софте и проч. Современные файловые системы (напр. NTFS) имеют механизмы минимизации вероятности ущерба, восстановления поврежденных данных, например
    • NTFS journaling – логгирует изменения с методанными в NTFS log, создавая историю операций и позволяя понимать, в каком состоянии должна быть система, это используется при восстановлении
    • NTFS self-healing – автоматическое восстановление после минорных проблем 
C:\WINDOWS\system32>fsutil repair query C:
Состояние самовосстановления C:: 0x9

Значения: 0x1 — включение общего восстановления.
0x9 — включение общего восстановления и предупреждений
о возможной потере данных.
0x10 — отключение восстановления и выполнение однократной
проверки ошибок при первом повреждении.
    • Даже в новом и свежеотформатированном разделе на Linux можно найти директорию lost+found, в нем находятся файлы, на которых не было ссылок ни в одном каталоге, хотя их inode не были помечены как свободные. Так же в эту папку попадают файлы, если произошли какие-то проблемы с файловой системой и fsck удалось восстановить какие-то данные.
    • NTFS chkdsk или Linux fsck (нельзя запускать на mounted partition) – утилиты по восстановлению данных при серьезных проблемах (bad sector, disk failure, etc). Могут запускаться автоматически, когда система обнаружит повреждение (система установит бит повреждения на volume, при старте системы система прочитает бит и запустит восстановление с помощью NTFS log) или всегда при загрузке (fsck на некоторых дистрибутивах Linux). 
C:\WINDOWS\system32>chkdsk
Тип файловой системы: NTFS.

ПРЕДУПРЕЖДЕНИЕ! Параметр F не указан.
CHKDSK выполняется в режиме только чтения.

Этап 1. Проверка базовой структуры файловой системы...
Обработано записей файлов: 534528.
Проверка файлов завершена.
Обработано больших файловых записей: 7967.
Обработано поврежденных файловых записей: 0.

Этап 2. Проверка связей имен файлов...
Обработано записей повторного анализа: 15456.
Обработано записей индекса: 629326.
Проверка индексов завершена.
Проверено неиндексированных файлов: 0.
Восстановлено неиндексированных файлов в утерянное и найденное: 0.
Обработано записей повторного анализа: 15456.

Этап 3. Проверка дескрипторов безопасности...
Проверка дескрипторов безопасности завершена.
Обработано файлов данных: 47400.
CHKDSK проверяет журнал USN...
Обработано байт USN: 35414728.
Завершена проверка журнала USN

Windows проверила файловую систему и не обнаружила проблем.
Дальнейшие действия не требуются.

117218303 КБ всего на диске.
81843428 КБ в 236952 файлах.
93804 КБ в 47401 индексах.
0 КБ в поврежденных секторах.
658323 КБ используется системой.
65536 КБ занято под файл журнала.
34622748 КБ свободно на диске.

4096 байт в каждой единице распределения.
Всего единиц распределения на диске: 29304575.
Доступно единиц распределения на диске: 8655687.


fsck -A # проверка всех файловых систем
fsck -a
# проверка и исправление всех файловых систем (устаревшая опция, не рекомендуется использовать)

Все в Linux есть файл. Для понимания типа файла есть соответсвующая команда file.

root@debian:/home/user/isic-master# file README
README: ASCII text
root@debian:/home/user/isic-master# file isic.c
isic.c: C source, ASCII text
root@debian:/home/user/isic-master# file install-sh
install-sh: POSIX shell script, ASCII text executable
root@debian:/home/user/isic-master# file isic
isic: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=81fd0e4362545acc48d18866f8a84d4ab8731075, not stripped
Чистый диск -> РАБОЧАЯ ФС
BRIEF REVIEW
Для использования чистого жесткого диска Free Disk (raw capacity, LUN – подробнее в статье про RAID) нужно:
  1. View data structure & create backup – посмотреть текущие разделы, чтобы ничего ненароком не поломать дальше. Так же настоятельно рекомендуется сделать backup данных в с носителей, которые будут затронуты. Утилиты: lsblk, fdisk, df
  2. Partition – разбить его на разделы используя разную разметку (MBR/GPT). Утилиты: parted, fdisk
  3. Format – накатить файловую систему на разделы (отформатировать разделы под файловую систему, осторожно, эта операция чистит файлы), тем самым сделав volume (FileSystem on partition). Утилиты: mkfs
  4. Mount – примонтировать файловую систему (вручную и в fstab для автоматического монтирования при старте системы, в Windows процесс происходит автоматически. Утилиты: mount, fstab (edit через vi)
Remember to always backup your data before modifying partitions on a live system.

Before you can start using a hard drive to store files, you'll need to partition the disk, format a filesystem, then mount the filesystem.

Instead of using a storage block as a whole, it's common practice to divide a storage block into different partitions. Partitions can be different sizes, and formatted to different filesystems. This allows you to use a single storage device for different purposes.

To automatically mount filesystems on startup, you have to add a device entry to the /etc/fstab file.
1. View data structure & BACKUP
lsblk
Посмотреть текущие диски (disk) и разделы (part), их размер и точку монтировки в древовидном виде (диски над разделами) можно в lsblk.
This command gathers information about all devices attached to the system, and prints them out using a tree-like structure. The column MOUNTPOINT shows where a block device is mounted. It's from this location that files on the disk can be accessed. In this case, the first disk (sda) is mounted at the root of the Linux file system tree. This means that the files you're seeing on your system right now are from this disk.
# CENTOS
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─centos-root 253:0 0 20G 0 lvm /
├─centos-swap 253:1 0 7,9G 0 lvm [SWAP]
└─centos-home 253:2 0 171,1G 0 lvm /home
sr0 11:0 1 1024M 0 rom

~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 60G 0 disk
├─vda1 253:1 0 256M 0 part /boot
└─vda2 253:2 0 59.8G 0 part /

# UBUNTU
~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 243M 0 part /boot
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 39,8G 0 part
├─test--vg-root (dm-0) 252:0 0 37,8G 0 lvm /
└─test--vg-swap_1 (dm-1) 252:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
fdisk
Или через sudo fdisk -l (с fdist мы еще столкнемся ниже, когда будем создавать разделы)
fdisk displays information contained in the partition table, where information about partitions is stored.

$ sudo fdisk -l
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x290377a6

Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 4096 20971519 20967424 10G 83 Linux


Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x290377a6

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 4096 20971519 20967424 10G 83 Linux
df
Посмотреть volume с файловой системой, количество свободного места в системе, точку монтировки можно через df -h
The df, or disk free, command is used to find the amount of free space on an entire machine, while the du, or disk usage, command is used to find the disk usage on a specific directory.

~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 1.8G 0 1.8G 0% /dev
tmpfs 371M 6.4M 365M 2% /run
/dev/sdb1 9.8G 1.1G 8.3G 12% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
DU

du – disk usage. 

Сортировка по размеру:

du -h | sort -h
OITOP

Можно посмотреть как используется диск на чтение/запись и какие приложения эти действия делают больше всего.

sudo iotop -o
BACKUP

Теорию читаем тут.

Используем утилиты по передаче данных scp/rsync совместно с утилитами по сжатию/архивированию или клонированию.

Для клонирования дисков/данных могут быть использованы не только средства платформы виртуализации, но и софт (clonezilla, Acronis TrueImage – часто используется админами, symantec ghost или даже утилиты системы (dd).

DD
umount /dev/sdd
sudo dd if=/dev/sdd of=~/my_image.img bs=100M

Размонтирование

# UMOUNT
lsof | grep /root/1/
kill <pid
kill -9 <pid>
umount /dev/sdc
umount -f /dev/sdc
umount -l /dev/sdc
Clonezilla

Clonezilla позволяет и залить образы заранее созданные образы системы и создать новые образы с помощью lifeUSB. Стабильно работающая версия – clonezilla-live-2.6.1-25-amd64.iso. LifeUSB сделать можно используя UNetbootin.

Утилиты для создания LifeUSB на основе ISO:

  • rufus  – debian (не netinstall – подробнее ниже, сам сталкивался в Debian 10!)
Оно не работает с нетинсталлом Debian — на этапе поиска CD диска в инсталляторе он не может его найти.
  • unetbootin – esxi 5.5
  • ultraiso

CloneZilla может использоваться даже для backup/restore всех компонентов операционной систем сетевых устройств (white boxes с Open Network Install Environment ONIE).

 

2. Partition
THEORY

Носители информации в Linux обозначаются последовательно по мере появления в системе (sda, sdb, sdc), разделы на носителях обозначаются цифрой после носителя (sda1, sdb3). 

Создание partition бывает на базе двух схем, схема определяет с какого может быть загрузка, максимальный размер/количество:
  • MBR (Master Boot Record) – старый способ, в основном на Windows, отказ от него постепенный. Поддержка Volume до 2ТБ размером, до 4 primary разделов (если хочешь больше – от primary создаешь extended, внутри которого можешь даже еще создать logical partition). Получается три типа разделов – primary, extended, logical. 
  • GPT (GUID Partition Table) – новый способ. Поддержка Volume более 2ТБ размером, бесконечное количество разделов. Обязателен для UEFI (замена BIOS). Один тип раздела (primary). 
MBR has a few legacy traits that are being slowly faded out by GPT. MBR only allows you to have volume sizes of 2TBs or less.  GPT doesn't have a limit to the amount of partitions you can make. GPT allows you to have volume sizes of 2TBs or greater.
Для создания разделов на Linux обычно используется parted, он умеет создавать разделы как MBR, так и GPT. Но так же можно использовать и fdisk.
FDISK

fdisk – полноценная утилита для просмотра/удаления/создания/изменения разделов. Выше мы ее применяли в командном режиме, ниже работа в интерактивном. В результате команд ниже из 10GB создадим 2 раздела – первый 1G SWAP, второй 9G как обычный раздел и применим эти настройки.

When the fdisk command is used without options, it provides a menu-driven environment for creating and deleting partitions.
sudo fdisk /dev/sdb # переходим в интерактивный режим с выбранным носителем (выбираем носитель, не раздел, если даже на диске уже есть разделы!)

# ПРОСМОТР РАЗДЕЛОВ
Command (m for help): p
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x290377a6

# УДАЛЕНИЕ РАЗДЕЛОВ
Command (m for help): d
Partition number (1,2, default 2):
Partition 2 has been deleted.
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

# СОЗДАНИЕ РАЗДЕЛОВ
Command (m for help): n # тут может ругнуться, значит сначала нужно удалить старый раздел: since all the space on the disk is currently allocated, you'll need to first free up space by deleting the default partition.
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1 # Since it's a primary partition, it can only be labelled from 1-4. It's good practice to assign partition numbers sequentially; problems can sometimes arise with certain programs if partitions aren't ordered sequentially.
First sector (2048-20967423, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-20967423, default 20967423): 2097200 # Provide the last sector of the new partition, up to where you want to allocate. The difference between the first and last sectors makes up the total size of the partition. Disk sector represents units used to measure the size on disks. Each sector stores a fixed amount of data. In lots of hard disks, for example, a sector stores 512 bytes. To create the first 1GB partition, enter 2097200 (divide the original partition by 10). Two important things happen here: the partition size is set to 1GB, and the partition type is set to "Linux".

Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2 # select partition number 2 to issue partition numbers in sequence.
First sector (2097201-20967423, default 2099200): # select the default partition starting sector, which is the next sector from the last partition you allocated.
Last sector, +sectors or +size{K,M,G,T,P} (2099200-20967423, default 20967423): # select the default last sector, which will be the last sector of the remaining disk space.
Created a new partition 2 of type 'Linux' and of size 9 GiB.
Created a new partition 1 of type 'Linux' and of size 1023 MiB.
Command (m for help): p
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x290377a6
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 2097200 2095153 1023M 83 Linux
/dev/sda2 2099200 20971519 18872320 9G 83 Linux

# ИЗМЕНЕНИЕ ТИПА РАЗДЕЛОВ
Command (m for help): t
Partition number (1,2, default 2): 1
Partition type (type L to list all types): L # тут можно посмотреть все возможные типы разделов с их ID
Partition type (type L to list all types): 82 # выбираем ID
Changed type of partition 'Linux' to 'Linux swap / Solaris'.
Command (m for help): p
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x290377a6
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 2097200 2095153 1023M 82 Linux swap / Solaris
/dev/sda2 2099200 20971519 18872320 9G 83 Linux

# ПРИМЕНЕНИЕ КОНФИГУРАЦИИ
Up to this point, you've just been editing the partition table in memory. You can use the command here to quit fdisk without committing changes to the disk. You can also update your partitions by using the d and n commands to remove and add new partitions.
Command (m for help): w # If you're satisfied with the changes you've made so far, you can commit them to the disk by using the command.
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

PARTED
Parted, как и fdisk, можно использовать в интерактивном режиме (как например irb в ruby) или в командной режиме (находясь в shell вызываем parted покомандно). В отличии от fdisk, parted сразу применяет настройки в интерактивном режиме.
/dev/sdb2 - The second partition of the second hard drive detected on the system
command mode
parted -l # смотрим какие диски подключены
~$ sudo parted -l
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 42,9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 1049kB 256MB 255MB primary ext2 boot
2 257MB 42,9GB 42,7GB extended
 5 257MB 42,9GB 42,7GB logical lvm


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/testsmsrobot--vg-root: 40,5GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number Start End Size File system Flags
 1 0,00B 40,5GB 40,5GB ext4


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/testsmsrobot--vg-swap_1: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number Start End Size File system Flags
 1 0,00B 2147MB 2147MB linux-swap(v1)
interactive mode
ПОДРОБНЕЕ В EVERNOTE
sudo parted /dev/sdb # переходим в интерактивный режим с выбранным носителем (выбираем носитель, не раздел, если даже на диске уже есть разделы!)
print # смотрим информацию по выбранному носителю
p # print
rm 1 # удалить первый раздел на выбранном носителе
 
 
 
 
3. Format
mkfs
Для форматирования созданных разделов можно использовать mkfs.
sudo mkfs -t ext4 /dev/sdb1 # форматируем раздел номер 1 носителя sdb файловой системой ext4
4. mount
mount, FSTAB
Для монтирования разделов используем команду mount. Перед модификацией диска его нужно размантировать через umount, после операций – смонтировать обратно. В целом возможно разбить диск, на котором работает ОС, но потребуется ребут после операции.
Mounting and unmounting mean making devices available or unavailable on a Linux file system. This is accomplished by the commands mount and umount. Before modifying a disk, you should first unmount it from the system, using the umount command. When modifications on the disk are done, you should mount it back onto the system. You can still partition the disk even when the operating system is running from it, but a reboot will be required in order for the partition changes you make to take place.

sudo mount /dev/sdb1 /my_usb/ # раздел номер 1 носителя sdb монтируем диск в папку my_usb
sudo mount /dev/sda2 /home/my_drive # раздел номер 2 носителя sda монтируем диск в папку my_usb
Помещение информации о носителе (диск/флешка) в файл fstab позволяет автоматически монтировать носитель при включении.
 
Алгоритм:
1) Узнаем UUID устройства sudo blkid
sudo blkid
2) Редактируем файл vi /etc/fstab – добавляем информацию о устройстве, файловой системе по примеру уже существующих записей
vi /etc/fstab
 

 

 
 
Ошибки
У меня такое было когда удалил для виртуалки диск. Нужно нажать S и разобраться с файлом /etc/fstab – удалить левый диск или поменять там UUID диска (если просто примантировать новый диск в ту же папку это не поможет, нужно обновлять UUID).
"Дисковод /usr/data не существует. Ожидайте или нажмите S, чтобы пропустить подключение или М для выполнения самостоятельного восстановления"

Leave a Reply