====== Управление файловыми системами в Linux ======
===== Получить информацию о подключенных дисках =====
# lshw -C disk
# lsblk
===== Анализ разделов на диске =====
# fdisk -l
# fdisk -l /dev/sda
# lsblk -o name,label,uuid
# man sfdisk
===== Монтирование файловых систем вручную =====
# mount /dev/cdrom /mnt
===== Монтирование файловых систем автоматически через udev =====
Можно не только монтировать, но и запрограммировать определенные действия, например бэкап.
* [[https://help.ubuntu.com/community/UsbDriveDoSomethingHowto|UsbDriveDoSomethingHowto]]
===== Добавление дисков в Linux =====
==== Удалить таблицу разделов ====
* [[Команда dd#Удаление таблицы разделов]]
==== Создать раздел ====
# parted -a optimal /dev/sdb
(parted) mklabel gpt
(parted) unit mib
(parted) mkpart primary 1 -1
(parted) print
(parted) quit
# fdisk /dev/sdb
n
p
1
w
# fdisk -l /dev/sdb
==== Выбрать файловую систему ====
* [[http://ru.wikipedia.org/wiki/Ext2|Ext2]]
* [[http://ru.wikipedia.org/wiki/Ext4|Ext4]]
* [[http://ru.wikipedia.org/wiki/ReiserFS|ReiserFS]]
* [[https://help.ubuntu.com/community/InstallingANewHardDrive|InstallingANewHardDrive]]
==== Cоздать файловую систему ====
# mkfs -t ext4 /dev/sdb1
# file -s /dev/sdb1
==== Смонтировать раздел ====
# mkdir /disk2
# mount /dev/sdb1 /disk2
# fuser -cu /disk2
# umount /disk2
==== Добавить соответствующую запись в файл /etc/fstab ====
# blkid
# cat /etc/fstab
...
# UUID=4ba44a69-3bf8-4e3a-8b65-589fae005f80 /disk2 ext4 defaults 0 0
# /dev/sdb1 /disk2 ext4 defaults 0 0
===== Использование шифрованных разделов в Linux =====
* [[http://en.wikipedia.org/wiki/Dm-crypt|dm-crypt]]
* Linux Unified Key Setup (LUKS)
==== Подготовка к использованию ====
* [[Управление файловыми системами в Linux#Добавление дисков в Linux]] (до создания раздела включительно или использовать весь /dev/sdb)
==== Инициализация ====
# apt install cryptsetup
# cryptsetup -y luksFormat /dev/sdb1
# cryptsetup luksDump /dev/sdb1
==== Подключение ====
# cryptsetup luksOpen /dev/sdb1 disk2
# mkfs -t ext4 /dev/mapper/disk2
# mount /dev/mapper/disk2 /disk2
==== Отключение ====
# umount /disk2
# cryptsetup luksClose disk2
===== Размещение файловых систем в файлах linux =====
* [[http://tldp.org/HOWTO/Cryptoloop-HOWTO/loopdevice-setup.html|Setting up the loop device]]
* [[Команда dd|Создание пустого файла]]
# losetup /dev/loop0 /disk2/filedisk
# losetup -a
# mkfs.ext3 /dev/loop0
# mount -t ext3 /dev/loop0 /mnt
# umount /mnt/
# losetup -d /dev/loop0
# cat /etc/fstab
...
/disk2/filedisk /filesystem ext3 loop 0 0
===== Использование LVM =====
* [[http://ru.wikipedia.org/wiki/LVM|LVM в Википедии]]
* [[http://xgu.ru/wiki/LVM|Повесть о Linux и LVM]]
debian# apt install lvm2
==== Расширение существующего логического тома ====
=== Список групп логических томов ===
# vgs
...
ubuntu-vg
...
=== Список логических томов в группе логических томов ===
# lvs ubuntu-vg
LV VG ...
ubuntu-lv ubuntu-vg ...
=== Добавляем новый диск к группе томов ===
Превращаем его в физический том LVM
# pvcreate /dev/sdb
Добавляем физический том к группе томов
# vgextend ubuntu-vg /dev/sdb
# pvs
=== Увеличиваем размер логического тома root в группе томов ===
# lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
=== Расширяем корневую файловую систему внутри логического тома ===
# df -h /
# resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
или
# xfs_growfs /
# df -h /
==== Создание и использование новой логической группы томов ====
=== Установка LVM в Debian/Ubuntu ===
root@gate:~# apt install lvm2
=== Инициализация диска (можно раздела) для включения его в группу томов ===
root@gate:~# pvcreate /dev/sdb
root@gate:~# pvs
root@gate:~# pvdisplay
=== Создаем новую группу томов (volume group) и добавляем туда свободный диск/раздел ===
root@gate:~# vgcreate vg1 /dev/sdb
root@gate:~# pvs
root@gate:~# pvdisplay
root@gate:~# vgdisplay vg1
=== Создаем логический том (logical volume) занимающий пространство в группе томов vg1 ===
* [[Технология LXC]]
* [[#Использование snapshot LVM]]
root@gate:~# lvcreate -n lv1 -L 1000M vg1
root@gate:~# lvdisplay
root@gate:~# lvdisplay /dev/vg1/lv1
=== Создаем файловую систему на логическом томе ===
root@gate:~# mkfs.ext4 /dev/vg1/lv1
или
root@gate:~# mkfs.ext4 /dev/mapper/vg1-lv1
root@gate:~# mount /dev/vg1/lv1 /disk2
или
root@gate:~# mount /dev/mapper/vg1-lv1 /disk2
root@gate:~# blkid /dev/mapper/vg1-lv1
=== Добавляем новый диск sdc к группе томов (volume group) ===
root@gate:~# pvcreate /dev/sdc
root@gate:~# vgextend vg1 /dev/sdc
root@gate:~# pvs
root@gate:~# pvdisplay
root@gate:~# vgdisplay vg1
=== Расширяем логический том (logical volume) ===
root@gate:~# lvextend -l +100%FREE /dev/vg1/lv1
=== Расширяем файловую систему ===
root@gate:~# resize2fs /dev/vg1/lv1
root@gate:~# xfs_growfs /
root@gate:~# df -h
=== Освобождаем диск sdb из группы томов ===
root@gate:~# umount /disk2
=== Уменьшаем размер файловой системы в томе (e2fsck обязательна) ===
root@gate:~# e2fsck -f /dev/vg1/lv1
root@gate:~# resize2fs /dev/vg1/lv1 990M
=== Уменьшаем размер логического тома ===
root@gate:~# lvreduce /dev/vg1/lv1 -L 1000M
Rounding up size to full physical extent 1000.00 MiB
WARNING: Reducing active logical volume to 1000.00 MiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv1? [y/n]: y
Reducing logical volume lv1 to 1000.00 MiB
Logical volume lv1 successfully resized
=== Монтируем логический том и продолжаем с ним работать ===
root@gate:~# mount /dev/vg1/lv1 /disk2
=== Переносим в "горячем режиме" данные с освобождаемого диска ===
root@gate:~# pvmove /dev/sdb
=== Отключаем диск от группы томов ===
root@gate:~# vgreduce vg1 /dev/sdb
Removed "/dev/sdb" from volume group "vg1"
root@gate:~# pvremove sdb
root@gate:~# pvs
=== Использование snapshot LVM ===
* [[https://serverfault.com/questions/184983/how-to-keep-or-drop-lvm-snapshot|How to keep or drop LVM snapshot?]]
* [[https://jnotes.ru/create-lvm-snapshot-and-restore.html|Создание lvm snapshot и восстановление из него]]
# lvcreate --size 1G --snapshot --name www_snap /dev/vg1/www
# lvs
Что-то ломаем в контейнере
# systemctl stop lxc@www
# lvconvert --merge /dev/vg1/www_snap
===== Использование квот (quota) =====
* [[http://www.howtoforge.com/how-to-set-up-journaled-quota-on-debian-lenny]]
* [[https://www.digitalocean.com/community/tutorials/how-to-enable-user-and-group-quotas]]
# apt install quota
# cat /etc/fstab
...
#/dev/sda1 / ext4 errors=remount-ro 0 1
/dev/sda1 / ext4 errors=remount-ro,usrquota 0 1
# mount -o remount /
# quotacheck -cum /
# quotaon /
# edquota user1
# For 10Mb
... soft hard ...
... 10000 10240 ...
# edquota -p user1 user2