Linux, работа с дисками – разделы, файлы, файловые системы в ОС (ls, lsblk, fdisk, find, rm/mdir/shred/tmpwatch, dd, synctoy, df, du, tree, iotop, parted, mkfs, mount, fstab, fsck, find, clonezilla, parted/gparted, OSFmount, ln, life cd&usb, flock, iotop/iostat/lsof)

разное/ОПРЕДЕЛЕНИЯ

  • (файлы/процессы) lsof – показывает какие файлы используются какими процессами (включая библиотеки/логи и про). А т.к. в linux все есть файлы – это зачастую очень полезная утилита, полезна, например, для размонтирования флешек, поиска места, куда пишет лог процесс, какие библиотеки использует.
root@spr:~# lsof | grep squ
squid 526 root cwd DIR 8,1 4096 2 /
squid 526 root rtd DIR 8,1 4096 2 /
squid 526 root txt REG 8,1 7076024 144505 /usr/sbin/squid
squid 526 root mem REG 8,1 282752 139004 /usr/lib/x86_64-linux-gnu/libnss_systemd.so.2
squid 526 root mem REG 8,1 55792 131763 /usr/lib/x86_64-linux-gnu/libnss_files-2.28.so
squid 526 root mem REG 8,1 35224 132160 /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4
squid 526 root mem REG 8,1 26616 136067 /usr/lib/x86_64-linux-gnu/libmnl.so.0.2.0
log_file_ 2307 proxy 3w REG 8,1 0 3671227 /var/log/squid/access.log
pinger 2308 proxy cwd DIR 8,1 4096 3672167 /var/spool/squid
pinger 2308 proxy txt REG 8,1 80536 144498 /usr/lib/squid/pinger
pinger 2308 proxy 2u REG 8,1 5928 3672498 /var/log/squid/cache.log
  • Про объекты данных (напр. 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).
  • Inode
Inode в файловых системах UNIX и UNIX-подобных операционных системах — это структуры данных, которые хранят информацию о файлах и каталогах. Каждый файл или каталог на диске ассоциируется с одним inode, который содержит метаданные файла, такие как его размер, разрешения, временные метки, ссылки на блоки данных и т.д. Количество inode на файловой системе обычно определяется в момент её создания и не может быть изменено без переформатирования или значительных изменений в файловой системе.

По какой причине inode могут закончиться ?
Причины исчерпания
1️⃣Большое количество мелких файлов: Одной из наиболее частых причин исчерпания inode является наличие очень большого количества маленьких файлов на файловой системе. Поскольку каждый файл использует как минимум один inode, системы с большим количеством мелких файлов могут исчерпать доступные inode, даже если дисковое пространство по-прежнему доступно.
2️⃣Недостаточное количество выделенных inode: При создании файловой системы, если количество выделенных inode было рассчитано неправильно (слишком мало для предполагаемого использования), это может привести к раннему их исчерпанию. Это особенно актуально для серверов или систем, где ожидается большое количество файлов.
3️⃣Особенности файловой системы: Некоторые файловые системы, такие как Ext3 или Ext4, имеют фиксированное соотношение inode к объёму файловой системы, которое задаётся при их создании. Если создать файловую систему с недостаточным количеством inode для конкретного случая использования, то в дальнейшем это может стать проблемой.

Решения проблемы исчерпания
1️⃣Проверка использования: С помощью команды df -i можно проверить, сколько inode используется и сколько ещё доступно в вашей файловой системе. ((подробнее ниже))
2️⃣Очистка файловой системы: Удаление ненужных или временных файлов может освободить inode.
3️⃣Изменение файловой системы: Если возможно, можно увеличить количество inode путём изменения файловой системы или пересоздания файловой системы с более высоким количеством inode. Для файловых систем, таких как XFS или некоторые конфигурации Btrfs, можно динамически добавлять inode.
4️⃣Использование других файловых систем: Переход на другую файловую систему, которая не имеет строгих ограничений на количество inode (например, Btrfs или ZFS), может быть решением для систем с большим количеством маленьких файлов.
5️⃣Архивирование: Программы и процессы, которые создают большое количество мелких файлов, могут модифицироваться для хранения данных в формате архивов вместо отдельных файлов, что снижает потребление inode.
Управление inode требует понимания специфики работы и нагрузки на файловую систему, а также может потребовать административных изменений для оптимальной настройки и эксплуатации системы хранения данных.

  • 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
Создание нового линка (ссылки) к файлу
ln -s /home/redkin_p/bin/i_help /home/redkin_p/i_help

ln -s /home/redkin_p/bin/i_updater /home/redkin_p/i_updater

  • 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, gdisk
  3. Format – накатить файловую систему на разделы (отформатировать разделы под файловую систему, осторожно, эта операция чистит файлы), тем самым сделав volume (FileSystem on partition). Утилиты: mkfs
  4. Mount – примонтировать файловую систему (вручную и в fstab для автоматического монтирования при старте системы, в Windows процесс происходит автоматически. Утилиты: mount, fstab (edit через vi). В целом Mount имеет разные опции, напр. ro (-o ro) или noexec (-o noexec), который базого защищает от запуска вредоносов (базовая защита т.к. их по факту все равно можно запустить указав интерпретатор).
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

df (disk free) — утилита в UNIX и UNIX-подобных системах, показывает список всех файловых систем по именам устройств, сообщает их размер, занятое и свободное пространство и точки монтирования. Последняя колонка (Смонтировано в) показывает за какие директории отвечает данный образ.

Ключ h или humanreadable отобразит размер в человеко-читабельном формате.

$ df -h 
Файл.система   Размер Использовано  Дост Использовано% Cмонтировано в
/dev/sda1        7,3G         6,0G  964M           87% /
none             4,0K            0  4,0K            0% /sys/fs/cgroup
udev             233M         4,0K  233M            1% /dev
tmpfs             49M         436K   49M            1% /run
none             5,0M            0  5,0M            0% /run/lock
none             245M            0  245M            0% /run/shm
none             100M            0  100M            0% /run/user
/dev/sdb1         83G         4,2G   75G            6% /usr/data

df -T – добавляем столбец с типом файловой системы. Напр. ext4 считается неплохой FS до сих пор ((поэтому и используется по умолчанию во многих дистрибутивах Linux)), но при большом количестве файлов можно использовать что-то другое.

$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
udev devtmpfs 8141220 0 8141220 0% /dev
tmpfs tmpfs 1632300 43888 1588412 3% /run
/dev/sda1 ext4 959395920 9435020 901156500 2% /
tmpfs tmpfs 8161484 0 8161484 0% /dev/shm
tmpfs tmpfs 5120 0 5120 0% /run/lock
tmpfs tmpfs 8161484 0 8161484 0% /sys/fs/cgroup
tmpfs tmpfs 1632296 0 1632296 0% /run/user/0

Посмотреть 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

df -i – смотрим количество Inode (used, free, %) – индексных дескриптеров файлов (метаинформация)

$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sdb1 8483456 8483456 0 100% /home

Пример изменения количества inode при создании файла:

# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 501474 334 501140 1% /dev
tmpfs 505191 475 504716 1% /run
/dev/sda1 5185536 114562 5070974 3% /
tmpfs 505191 4 505187 1% /dev/shm
tmpfs 505191 2 505189 1% /run/lock
tmpfs 505191 17 505174 1% /sys/fs/cgroup
tmpfs 505191 10 505181 1% /run/user/0
# cat >1
# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 501474 334 501140 1% /dev
tmpfs 505191 475 504716 1% /run
/dev/sda1 5185536 114563 5070973 3% /
tmpfs 505191 4 505187 1% /dev/shm
tmpfs 505191 2 505189 1% /run/lock
tmpfs 505191 17 505174 1% /sys/fs/cgroup
tmpfs 505191 10 505181 1% /run/user/0
# cat >2
# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 501474 334 501140 1% /dev
tmpfs 505191 475 504716 1% /run
/dev/sda1 5185536 114564 5070972 3% /
tmpfs 505191 4 505187 1% /dev/shm
tmpfs 505191 2 505189 1% /run/lock
tmpfs 505191 17 505174 1% /sys/fs/cgroup
tmpfs 505191 10 505181 1% /run/user/0
DU

du(disk usage) — стандартная Unix программа для оценки занимаемого файлового пространства.

du -h / | sort -h – ищем объемные файлы/папки во всей системе и сортируем по возрастанию.

du -sh /var/www/localhost/htdocs/w/ – узнать размер папок и вложений

~$ du -sh /var/www/cacti/
1,1G/var/www/cacti/

~$ du -sh /var/www/w/
94M /var/www/w/

~$ du -sh /var/www/localhost/
708K/var/www/localhost/

du -s * | sort –n – узнать размер каждой папки и файла относительно нашей (*) и отсортировать по размеру. Ключ –s позволяет показывать только общий размер папки, не показывая размер каждого файла внутри папки.

du -s * | sort -n | cut -f 2|while read a;do du -hs $a;done >1 – отображение в удобной форме для человеческого глаза (H) с выводом в мегабитах/мегабайтах.

du+diff – если сервак начинает заполняться по памяти и непонятно кто память заполняет можно проанализировать размер файлов черезdu во всех папках пару раз и потом diff’ом поискать какие папки изменились.

~$ diff 2_1 2_2
236,237c236,237
< 4186296 tftpd
< 4686866 tools
---
> 4186664 tftpd
> 4687674 tools

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

du -h | sort -h
tree

tree – утилита для просмотра вложенных папок и файлов относительно текущей папки. По сути родственник du. С опциями -hs можно посмотреть размер файлов в понятном виде, с опцией -d можно посмотреть только директории.

IOTOP/IOSTAT/lSOF
  • iotop – какие процессы в настоящее время создают нагрузку (чтение/запись) на диск, пример вывода при загрузке большого файла на диск, причем если загружать в /dev/null загрузки диска не будет 🙂
apt install iotop

wget https://speedtest.selectel.ru/10GB
iotop

TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
24043 be/4 root 0.00 B/s 0.00 B/s 0.00 % 95.10 % [kworker/u4:1+flush-8:0]
240 be/3 root 0.00 B/s 3.76 K/s 0.00 % 68.68 % [jbd2/sda1-8]
23297 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.02 % [kworker/1:1-events]

wget -O /dev/null https://speedtest.selectel.ru/10GB

  • iostat – в расширенном выводе можно посмотреть как загружен диск в %util (до 100%), по принципу своего расчета это “как часто диск был занят когда он был нужен“. Внимание – в базовом выводе в первые строки зачем то добавили информацию о загрузке CPU и невнимательный может подумать, что это относится к дискам.
apt install sysstat
# iostat
Linux 4.19.0-16-amd64 (spr) 12/09/23 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.01 0.00 0.00 0.01 0.00 99.98
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
fd0 0.00 0.00 0.00 8 0
sda 0.02 0.09 0.34 249987 902224
# iostat -x -d
Linux 4.19.0-16-amd64 (spr) 12/09/23 _x86_64_ (2 CPU)
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
fd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 65.00 0.00 0.00 4.00 0.00 66.00 0.00
sda 0.00 0.02 0.09 0.35 0.00 0.02 0.59 60.43 9.36 23.74 0.00 26.12 23.15 7.29 0.01

https://stackoverflow.com/questions/4458183/how-the-util-of-iostat-is-computed
Percentage of CPU time during which I/O requests were issued to the device (band-width utilization for the device). Device saturation occurs when this value is close to 100%.

[%util is] how much time did the storage device have outstanding work (was busy).

 

BACKUP

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

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

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

Любое из средств создания image/backup может глючит (и регулярно так бывает, даже платный Acronis может три часа делать бекап и сделать в итоге нечитаемый образ), правильные бекапы всегда проверяют, а если не проверяют, то хотя бы делают двумя средствами создания бекапов.

DD
Чтобы создать загрузочный USB-носитель с использованием Linux (альтернатива rufus, unetbootin, win32diskimager, etc):
dd if=/tmp/some_OS.iso of=/dev/sdb
SYNCTOY

Бесплатная утилита от Microsoft для синхронизации файлов/директорий, поддерживает в том числе сетевые пути (UNC Paths). Microsoft прекратил поддержку утилиты, но на просторах интернета ее найти легко. Для работы требует установленного .NET framework version 2.0.50727, на практике проще всего поставить сразу .NET framework 3.5, который включает 2.0 и 3.0. У утилиты три режима синхронизации – двухсторонняя между source и target, односторонняя с подменой конфликтных файлов с предпочтением source (echo, я использую), односторонняя с сохранением всех конфликтов путем изменения имен файлов (инкремент).

SyncToy
Users initially need to create a "folder pair" that represents the two folders ("left" and "right" folders) to be compared and synchronized. These folders can be on the local drive, on an external device such as a flash drive, or on a network share from another computer. SyncToy supports UNC paths. It provides a Browse option to find the folder or network share, or users can type it in directly.

UNC path
The Microsoft Windows UNC, short for Universal Naming Convention or Uniform Naming Convention, specifies a common syntax to describe the location of a network resource, such as a shared file, directory, or printer. The UNC syntax for Windows systems has the generic form:
\\ComputerName\SharedFolder\Resource

UMOUNT

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

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

Использовал для конвертации из IMG в ISO.

 

Clonezilla

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

  • Клон ESXi 6.7 с помощью CloneZilla с дефолтными опциями обычно заканчивается фактическим fail – получается склонировать сам гипервизор, но машины в datastore и сам datastore гипервизором не распознаются.
  • В папке clonezilla с сохраненным image можно понять версию с которой он снимался открыв текcтовым редактором файл clonezilla-img.
This image was saved by Clonezilla at 2020-02-18 15:11:50 UTC.
Saved by clonezilla-live-2.6.1-25-amd64.
  • Если CloneZilla зависает во время “configuring keyboard” – может помочь
    • 1) перезагрузка ПАК
    • 2) ctrl+c (помогало на 2.5.0-5, не помогало на 2.6.1-25) и процесс продолжится дальше.

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

  • etcher от Balena – прекрасно работает для установки Debian 10 (и не только его), в том числе с netinstall
  • rufus  – debian и Windows (не netinstall – подробнее ниже, сам сталкивался в Debian 10!)
Оно не работает с нетинсталлом Debian — на этапе поиска CD диска в инсталляторе он не может его найти.

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

 

2. Partition
THEORY
База. Можно добавить только то, что разделы несмотря на рост объемов памяти актуальны и сейчас – плюсы:
    • разделы предоставляют базовую защиту от отказа системы в случае заполнения (отдельный раздел под пользовательские задачи от системного)
    • на отдельные разделы проще накладывать какие-то ограничения (квоты)
    • возможность более простого переноса/восстановления пользовательских файлов при нарушении целостности системного раздела и проч
Data is stored on disk drives that are logically divided into partitions. A partition can exist on a portion of a disk, on an entire disk, or it may span multiple disks. Each partition may contain a file system, a raw data space, a swap space, or a dump space.

A file system is used to hold files and directories, a raw data space may be used for databases and other applications for faster access, a swap space is defined to supplement the physical memory on the system, and a dump space is created to store memory and kernel images after a system crash has occurred.

Linux offers several toolsets for partitioning and managing disk storage. These toolsets include the parted and gdisk utilities and the Logical Volume Manager (LVM). Additional tools, such as fdisk, sfdisk, and cfdisk, are also available for this purpose. Partitions created with a combination of most of these tools can co-exist on a single disk.

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

Создание partition бывает на базе двух схем (или одно или другое т.к. обе таблицы хранятся вначале диска), схема определяет с какого может быть загрузка, максимальный размер/количество:
    • MBR (Master Boot Record) – старый способ, но до сих пор используется (в основном используется на Windows и на VM), отказ от него постепенный, но у него плюс в максимальной совместимости/поддержки всеми девайсами (по аналогии с FAT32). Поддержка Volume до 2ТБ размером, до 4 primary разделов (если хочешь больше – от primary создаешь extended, внутри которого можешь даже еще создать logical partition). Получается три типа разделов – primary, extended, logical.
    • GPT (GUID Partition Table) – новый способ. Поддержка Volume более 2ТБ размером, бесконечное количество разделов. Обязателен для UEFI (замена BIOS). Один тип раздела – volume (по сути 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 (MBR), gdisk (GPT).
parted understands both MBR and GPT formats. 
gdisk (a.k.a. GPT fdisk) is designed to support the GPT format only and can be used instead of parted. 
fdisk utility does not understand GPT and cannot address space exceeding 2TB.
FDISK
  • Основные команды fdisk/gdisk – p (print), n (new), d (delete), w (write).

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.

GDISK
  • Основные команды fdisk/gdisk – p (print), n (new), d (delete), w (write).

The gdisk utility is used to carve up disks using GPT format. This text-based, menu-driven program allows us to view, add, verify, modify, and delete partitions among other tasks. gdisk can be used to create up to 128 partitions on a single GPT disk on systems with UEFI firmware.

[root@localhost ~]# gdisk /dev/vdc
GPT fdisk (gdisk) version 0.8.6
Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present
Creating new GPT entries.
Command (? for help): ?
b       back up GPT data to a file
c       change a partition's name
d       delete a partition
i       show detailed information on a partition
l       list known partition types
n       add a new partition
o       create a new empty GUID partition table (GPT) ((Labels the disk to use GPT scheme.))
p       print the partition table
q       quit without saving changes
r       recovery and transformation options (experts only)
s       sort partitions
t       change a partition's type code
v       verify disk
w       write table to disk and exit
x       extra functionality (experts only)
?       print this menu

В случае запуска на MBR диск.

[root@localhost ~]# gdisk /dev/vdb
GPT fdisk (gdisk) version 0.8.6
Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format.
THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing 'q' if
you don't want to convert your MBR partitions to GPT format!
***************************************************************
Command (? for help):

Create a GPT Partition Table and a Partition Using gdisk

Execute the gdisk command on /dev/vdc

[root@localhost ~]#  gdisk /dev/vdc
GPT fdisk (gdisk) version 0.8.6
Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present
Creating new GPT entries.
Command (? for help):

Assign GPT as the partition table to the disk using the o subcommand. Enter y for confirmation to proceed. view the disk label. The output shows the assigned GUID states that the partition table can hold up to 128 partition entries.

Command (? for help): o

This option deletes all partitions and creates a new protective MBR.

Proceed? (Y/N): y
Command (? for help): p
Disk /dev/vdc: 4194304 sectors, 2.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 72FEE5EE-C06F-4A6E-9F91-CEB534429A90
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 4194270
Partitions will be aligned on 2048-sector boundaries
Total free space is 4194237 sectors (2.0 GiB)
Number  Start (sector)    End (sector)  Size       Code  Name

Create a 200MB partition using the n subcommand. Use all the defaults except for the size specification. Verify the new partition with p. Первые секторы заняты MBR table, поэтому предлагается в качестве раздела использовать default = 2048. Последние секторы можно указать желаемым размером в виде +-size{KMGTP} (+200M), не указывая непосредственный сектор.

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-4194270, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-4194270, default = 4194270) or {+-}size{KMGTP}: +200M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'
Command (? for help): p
Disk /dev/vdc: 4194304 sectors, 2.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 72FEE5EE-C06F-4A6E-9F91-CEB534429A90
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 4194270
Partitions will be aligned on 2048-sector boundaries
Total free space is 3784637 sectors (1.8 GiB)
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          411647   200.0 MiB   8300  Linux filesystem

Run the w subcommand to write the partition information to the partition table. Enter y to confirm.

Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/vdc.
The operation has completed successfully.
[root@localhost ~]#

Confirm the partition information by running either of the following at the command prompt. You may need to run the partprobe command after exiting the gdisk utility to inform the kernel of changes in the partition table if the disk previously had partitions. This is not required for new unpartitioned disks.

[root@localhost ~]#  gdisk -l /dev/vdc
GPT fdisk (gdisk) version 0.8.6
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/vdc: 4194304 sectors, 2.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 72FEE5EE-C06F-4A6E-9F91-CEB534429A90
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 4194270
Partitions will be aligned on 2048-sector boundaries
Total free space is 3784637 sectors (1.8 GiB)
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          411647   200.0 MiB   8300  Linux filesystem

[root@localhost ~]# grep vdc /proc/partitions
252       32    2097152 vdc
252       33     204800 vdc1

Create three 50MB partitions on /dev/vdc using the gdisk utility and set appropriate flags to use them as a file system, a swap space, and an LVM partition, respectively.
[root@localhost ~]# gdisk /dev/sdd

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help): p
Disk /dev/sdd: 1035302 sectors, 505.5 MiB
Logical sector size: 512 bytes
Disk identifier (GUID): C5AC991A-323D-42A6-8369-12A6906DAD05
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1035268
Partitions will be aligned on 2048-sector boundaries
Total free space is 1035235 sectors (505.5 MiB)
Number Start (sector) End (sector) Size Code Name

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-1035268, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-1035268, default = 1035268) or {+-}size{KMGTP}: +50M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (2-128, default 2):
First sector (34-1035268, default = 104448) or {+-}size{KMGTP}:
Last sector (104448-1035268, default = 1035268) or {+-}size{KMGTP}: +50M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (3-128, default 3):
First sector (34-1035268, default = 206848) or {+-}size{KMGTP}:
Last sector (206848-1035268, default = 1035268) or {+-}size{KMGTP}: +50M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdd: 1035302 sectors, 505.5 MiB
Logical sector size: 512 bytes
Disk identifier (GUID): 99C5539C-A978-42C8-8BF9-D959C6402B37
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1035268
Partitions will be aligned on 2048-sector boundaries
Total free space is 728035 sectors (355.5 MiB)

Number Start (sector) End (sector) Size Code Name
  1 2048 104447 50.0 MiB 8300 Linux filesystem
  2 104448 206847 50.0 MiB 8300 Linux filesystem
  3 206848 309247 50.0 MiB 8300 Linux filesystem

Command (? for help): t
Partition number (1-3): 2
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): L
0700 Microsoft basic data 0c01 Microsoft reserved 2700 Windows RE
4200 Windows LDM data 4201 Windows LDM metadata 7501 IBM GPFS
7f00 ChromeOS kernel 7f01 ChromeOS root 7f02 ChromeOS reserved
8200 Linux swap 8300 Linux filesystem 8301 Linux reserved
8e00 Linux LVM a500 FreeBSD disklabel a501 FreeBSD boot
a502 FreeBSD swap a503 FreeBSD UFS a504 FreeBSD ZFS
a505 FreeBSD Vinum/RAID a580 Midnight BSD data a581 Midnight BSD boot
a582 Midnight BSD swap a583 Midnight BSD UFS a584 Midnight BSD ZFS
a585 Midnight BSD Vinum a800 Apple UFS a901 NetBSD swap
a902 NetBSD FFS a903 NetBSD LFS a904 NetBSD concatenated
a905 NetBSD encrypted a906 NetBSD RAID ab00 Apple boot
af00 Apple HFS/HFS+ af01 Apple RAID af02 Apple RAID offline
af03 Apple label af04 AppleTV recovery af05 Apple Core Storage
be00 Solaris boot bf00 Solaris root bf01 Solaris /usr & Mac Z
bf02 Solaris swap bf03 Solaris backup bf04 Solaris /var
bf05 Solaris /home bf06 Solaris alternate se bf07 Solaris Reserved 1
bf08 Solaris Reserved 2 bf09 Solaris Reserved 3 bf0a Solaris Reserved 4
bf0b Solaris Reserved 5 c001 HP-UX data c002 HP-UX service
ed00 Sony system partitio ef00 EFI System ef01 MBR partition scheme
ef02 BIOS boot partition fb00 VMWare VMFS fb01 VMWare reserved
fc00 VMWare kcore crash p fd00 Linux RAID
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'

Command (? for help): p
Disk /dev/sdd: 1035302 sectors, 505.5 MiB
Logical sector size: 512 bytes
Disk identifier (GUID): 99C5539C-A978-42C8-8BF9-D959C6402B37
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1035268
Partitions will be aligned on 2048-sector boundaries
Total free space is 728035 sectors (355.5 MiB)

Number Start (sector) End (sector) Size Code Name
  1 2048 104447 50.0 MiB 8300 Linux filesystem
  2 104448 206847 50.0 MiB 8200 Linux swap
  3 206848 309247 50.0 MiB 8300 Linux filesystem

Command (? for help): t
Partition number (1-3): 3
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8e00
Changed type of partition to 'Linux LVM'

Command (? for help): p
Disk /dev/sdd: 1035302 sectors, 505.5 MiB
Logical sector size: 512 bytes
Disk identifier (GUID): 99C5539C-A978-42C8-8BF9-D959C6402B37
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1035268
Partitions will be aligned on 2048-sector boundaries
Total free space is 728035 sectors (355.5 MiB)

Number Start (sector) End (sector) Size Code Name
  1 2048 104447 50.0 MiB 8300 Linux filesystem
  2 104448 206847 50.0 MiB 8200 Linux swap
  3 206848 309247 50.0 MiB 8E00 Linux LVM

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdd.
The operation has completed successfully.

Delete a GPT Partition Using gdisk

Execute the gdisk command on the /dev/vdc disk

gdisk /dev/vdc

View the current partition table using the p subcommand:

Command (? for help): p

Execute the d subcommand and specify the partition number to delete, verify and quit with save:

Command (? for help): d1
Using 1
Command (? for help): p
Command (? for help): w

Confirm the partition information:

[root@localhost ~]# gdisk -l /dev/vdc
[root@localhost ~]# grep vdc /proc/partitions

Далее смотрим Create an MBR Partition Table and a Partition Using parted

(G)PARTED
  • gparted – GUI для parted.gparted live image использовал для сжатия раздела (resizepart), с которым не мог справится Resize-VHD (сжал gparted раздел 32GB до менее 4GB). После ужатия gparted уже использовал Resize-VHD для сжатия непосредственно виртуального диска.
    The parted tool is used to carve up disks on RHEL systems. This text-based, menu-driven program allows us to view, add, check, modify, copy, resize, and delete partitions. parted understands and supports both MBR and GPT schemes. It can be used to create up to 128 partitions on a single GPT disk.
  • Parted, как и fdisk/gdisk, можно использовать в интерактивном режиме (как например irb в ruby) или в командной режиме (находясь в shell вызываем parted покомандно), но в отличии от fdisk/gdisk, parted сразу применяет настройки в интерактивном режиме.
  • Но несмотря на богатых функционал (форматирование, resize, изменение уже созданных разделов). Основная задача parted – создание разделов на диске и для форматирования и для resize есть другие утилиты, специализированные для файловой системы – ext/xfs/etc и в целом по практике лучше использовать именно специализированные версии.
  • Недостатком parted является то, что он по умолчанию в системах зачастую отсутствует, так же он может устанавливаться с ворохом gui зависимостей при установке по итогу устанавливая gparted, помимо консольной версии; поэтому алгоритм автора курса – если нет parted уже установленного, то использовать fdisk/gdisk (LPIC-2 course), потому что в целом репартиция это разовые действия.
  • Достоинство что он поддерживает MBR/GPT и другие форматы (Apple, BSD, etc) partition table, более интуитивен за счет нового более user-friendly подхода по настройке.
  • Список возможных команд/опций в интерактивном режиме выводится по help, указав на входе help команду можно получить по ней справку.
  • Утилита, естественно, требует sudo.
  • Примененик конфигурации происходит при выходе из утилиты.
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
interactive mode
sudo parted /dev/sdb # переходим в интерактивный режим с выбранным носителем (выбираем носитель, не раздел, если даже на диске уже есть разделы!), причем можно при запуске не выбирать носитель, а выбрать потом по команде select
p/print # смотрим всю информацию, можно отфильтровать по print devices 
rm 1 # удалить первый раздел на выбранном носителе
  • $ parted
    WARNING: You are not superuser. Watch out for permissions.
    /dev/mapper/control: open failed: Permission denied
    Failure to communicate with kernel device-mapper driver.
    Incompatible libdevmapper (unknown version) and kernel driver (unknown version).
    Error: No device found
    Retry/Cancel?

help

# sudo parted
…
…
…
(parted) help 
align-check TYPE N check partition N for TYPE(min|opt) alignment
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END make a partition
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular partition
quit exit program
rescue START END rescue a lost partition near START and END
resizepart NUMBER END resize partition NUMBER
rm NUMBER delete partition NUMBER
select DEVICE choose the device to edit
disk_set FLAG STATE change the FLAG on selected device
disk_toggle [FLAG] toggle the state of FLAG on selected device
set NUMBER FLAG STATE change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER
unit UNIT set the default unit to UNIT
version display the version number and copyright information of GNU Parted

(parted) print devices 
/dev/sda (85.9GB)
(parted) help mklabel
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
LABEL-TYPE is one of: atari, aix, amiga, bsd, dvh, gpt, mac, msdos, pc98, sun, loop

Create an MBR Partition Table and a Partition Using parted

Execute the parted command on /dev/vdb, view the current partition information:

# parted /dev/vdb
GNU Parted 3.1
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Error: /dev/vdb: unrecognised disk label
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

1) mklabel сначала создаем разметку диска (label/partition table) – GPT, MBR, MSDOS или другой (можно передавать команде переменные как ниже, но проще/удобнее просто ввести команду и попасть в интерактивный режим/wizard)

Assign disk label “msdos” to the disk with mklabel. This must be done on a new disk. To use the GPT partition table type, run “mklabel gpt” instead.

(parted) mklabel msdos
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number  Start  End  Size  Type  File system  Flags

2) mkpart далее создаем непосредственно разделы – выбираем файловую систему для раздела, указываем стартовой объем и конечный в мегабайтах, так же можно указать имя раздела (можно передавать команде переменные как ниже, но проще/удобнее просто ввести команду и попасть в интерактивный режим/wizard)

Create a 1GB primary partition starting at 1MB using mkpart.

(parted) mkpart primary 1 1g
(parted) mkpart primary ext4 1Mib 4Gib # еще пример
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number  Start   End     Size   Type     File system  Flags
1      1049kB  1000MB  999MB  primary

Confirm the partition information. You may need to run the partprobe command after exiting the parted utility to inform the kernel of changes in the partition table if the disk previously had partitions. This is not required for new unpartitioned disks.

# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number  Start   End     Size   Type     File system  Flags
1      1049kB  1000MB  999MB  primary

# grep vdb /proc/partitions
252       16    2097152 vdb
252       17     975872 vdb1
3. Format (для parted необязательно)
mkfs
Для форматирования созданных разделов можно использовать mkfs.
sudo mkfs -t ext4 /dev/sdb1 # форматируем раздел номер 1 носителя sdb файловой системой ext4
4. mount
mount, FSTAB – монтируем созданный раздел вручную mount или при загрузках fstab (file system table)
Для монтирования разделов используем команду 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
Mount так же позволяет посмотреть все разделы/диски в системе и их форматирование, но вывод достаточно плохо читаемый в сравнении с альтернативами (lsblk/fdisk/gdisk/parted).
# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=2005896k,nr_inodes=501474,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=404156k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=37,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=10477)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
mqueue on /dev/mqueue type mqueue (rw,relatime)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=404152k,mode=700)
FLOCK
Запуск только одного instance программы возможен с использованием lock файлов и таких утилит как flock, lockfile.
По умолчанию второй instance app при запуске обоих instance с одним flock ожидает снятия блокировки первым (активным) instance.
By default, if the lock cannot be immediately acquired, flock waits until the lock is available.
Но это можно легко поменять:
# Ждем 10 секунд
flock --wait 10 /var/lock/test.lock python3 /root/weril/test.py

# Не ждем вообще
flock –nonblock /var/lock/test.lock python3 /root/weril/test.py

# И в первом и во втором случае получаем Error code 1 (т.е. не 0 -> ошибка)
echo $?

Просмотр файлов

ls – list files

-a  - all files (включая скрытые)
-l  - long listing (показать таблицу с правами-размером-датами)
-h  - human readable (конвертация в MB/GB/etc)
FIND – ПОиск файлов

Поиск файла по названию в файловой системе.

find / -name "download*"
find может не работать если не заключать искомый pattern со спец. символами в кавычки. Происходит это тогда, когда в локальной папке присутствуют искомые файлы. Причем сам find об этом пишет в подсказке к ошибке – possible unquoted pattern after predicate.
serv# find /home/user/test -name webs*
find: paths must precede expression: `webs.txt'
find: possible unquoted pattern after predicate `-name'?

Поиск и удаление файлов, которые созданы более 120 секунд (от текущего времени). Второй строкой скрипт, который можно запустить в бекраунд для очистки каждый 120 секунд таких файлов,

find -not -newermt '-120 seconds' -delete
while true; do date; echo "delete files older 120 seconds"; find -not -newermt '-120 seconds' -delete; sleep 120; done

Find умеет работать с выражениями OR (-o), AND (-a): найти файлы с тремя различными именами в рамках одного поиска.

find / -name 'xxx' -o name 'yyy' -o name 'zzz'

 

Удаление файлов

rm – простое удаление файлов. При удалении по маске можно столкнуться с ошибкой Argument list too long, которая говорит о том, что файлов слишком много. В таком случае или удаляем все или удаляем скриптом (while xxx).

rmdir – удаление директорий

shred – позволяет удалять файл и осуществлять перезапись в пространство памяти, которое занимал файл, тем самым значительно усложняя его восстановление.

shred -uv /etc/apt/trusted.gpg.d/microsoft.gpg
tmpwatch – позволяет удалять файлы, к котором не обращались определенное время. Обычно используется для чистки temp директорий.
tmpwatch - removes files which haven't been accessed for a period of time

/usr/sbin/tmpwatch –ctime 30d /temp/script_temp

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

Leave a Reply