
Решил сделать небольшую заметку о том, как работать с AWS EBS. Существует несколько способов. Расскажу как можно это сделать несколькими способами.
Работа с AWS EBS в Unix/Linux (Ручная)
Покажу на наглядном примере как можно создать, примаунтить том к созданной машине. Начну с того, что создам раздел (AWS EBS волюму), для этого логинимся в AWS Console. Затем, переходим в EC2 раздел. Затем, Volume раздел. После этого, нажимаем на «Create Volume»:
После создание нового раздела, его стоит приатачить на нужный инстанс(машину), для этого, — открываем EC2 -> в блоке ELASTIC BLOCK STORE находим «Volumes», затем находим созданный раздел. Кликаем на нужную волюму правой клавишей мышки и выбираем «Attach Volume» (Так же можно нажать на «Actions -> Attach Volume»):
Создаем папку:
$ mkdir /var/build/garson_home
Смотрим какие диски есть в системе:
root@ip-10-101-44-43:~# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTloop0 7:0 0 12.6M 1 loop /snap/amazon-ssm-agent/295loop1 7:1 0 87M 1 loop /snap/core/5145xvda 202:0 0 100G 0 disk`-xvda1 202:1 0 100G 0 part /xvdf 202:80 0 1.5T 0 diskroot@ip-10-101-44-43:~#
ВНИМАНИЕ! Определите, есть ли файловая система на томе(волюме). Новые тома являются необработанными блочными устройствами, и вы должны создать на них файловую систему, прежде чем сможете их монтировать и использовать. Тома, которые были восстановлены из снапшетов, вероятно, уже имеют файловую систему; если вы создаете новую файловую систему поверх существующей файловой системы, операция перезаписывает ваши данные.
Используйте команду «file -s», чтобы получить информацию об устройстве, например, тип файловой системы:
root@ip-10-101-44-43:~# file -s /dev/xvdf/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=aee3cf72-5a23-4ea6-9c50-af100dfc0912 (needs journal recovery) (extents) (large files) (huge files)root@ip-10-101-44-43:~#
Сейчас можем смонитировать:
root@ip-10-101-44-43:~# mount /dev/xvdf /var/build/garson_homeroot@ip-10-101-44-43:~#
Если получили ошибку:
mount: /var/build/garson_home: wrong fs type, bad option, bad superblock on /dev/xvdf, missing codepage or helper program, or other error.
То решение — форматирование волюмы:
# mkfs -t ext4 /dev/xvdfmke2fs 1.44.1 (24-Mar-2018)Creating filesystem with 157286400 4k blocks and 39321600 inodesFilesystem UUID: e91fac36-3163-415c-a583-b390cce264c7Superblock backups stored on blocks:32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,102400000Allocating group tables: doneWriting inode tables: doneCreating journal (262144 blocks): doneWriting superblocks and filesystem accounting information: done
и потом можно сново монтировать:
# mount /dev/xvdf /var/build/garson_home
Чтобы отмонтировать раздел, стоит выполнить:
# umount /var/build/garson_home
Получил ошибку при удалении папки:
rm: cannot remove '/var/build/garson_home': Device or resource busy
Фикс:
root@ip-10-101-40-26:~# losetup -d /dev/loop0root@ip-10-101-40-26:~# fuser -vm /var/build/garson_homeUSER PID ACCESS COMMAND/var/build/garson_home:root kernel mount /var/build/garson_homeroot@ip-10-101-40-26:~# losetup -d /dev/loop1root@ip-10-101-40-26:~# fuser -vm /var/build/garson_homeUSER PID ACCESS COMMAND/var/build/garson_home:root kernel mount /var/build/garson_homeroot@ip-10-101-40-26:~# losetup -a/dev/loop1: [66309]:62992 (/var/lib/snapd/snaps/core_5145.snap)/dev/loop0: [66309]:62995 (/var/lib/snapd/snaps/amazon-ssm-agent_295.snap)root@ip-10-101-40-26:~# umount /var/build/garson_homeroot@ip-10-101-40-26:~#
Как-то так. Все вроде бы логично и работает, но…. при следующем перезапуске ОС, раздел не будет автоматически атачиться к файловой системе, для этого — нужно добавить некоторые действия в fstab.
Для начала, скопируем конфиг:
# cp /etc/fstab /etc/fstab.orig
Это не обязательно, но если что-то пойдет не так — можно будет откатиться назад.
Используйте команду blkid, чтобы найти UUID устройства:
# blkid
Открываем fstab:
# vim /etc/fstab
И прописываем:
UUID=YOUR_UUID_HERE /YOUR_MOUNT_PATH_HERE TYPE_FS_HERE defaults,nofail DUMP_HERE PASS_HERE
Где:
- YOUR_UUID_HERE — Это UUID, который получили с вывода команды blkid для вашего раздела (Пример: bc756bb8-a3cb-4c07-90b9-8827e73687c9).
- YOUR_MOUNT_PATH_HERE — Это путь для монтирования (Например: /var/build/garson_home).
- TYPE_FS_HERE — Это тип монтируемой ФС (Например: xfs).
- defaults,nofail — Это опции монтирования.
- DUMP_HERE — Используется утилитой dump для того чтобы определить, когда делать резервную копию. После установки, dump проверяет эту запись и использует значение, чтобы решить, подключать ли файловую систему. Возможные значения 0 или 1. Если 0, dump игнорирует файловую систему, если 1, dump сделает резервную копию. У большинства пользователей dump не установлен, поэтому в поле следует задать 0. Например: 0.
- PASS_HERE — Это номер прохода. Утилита fsck проверяет число, подставленное в поле и решает, в каком порядке проверять файловую систему. Возможные значения 0, 1 и 2. Файловые системы со значением , равным 0, не будут проверены утилитой fsck. У корневой системы должен быть наибольший приоритет, 1, остальные файловые системы должны иметь приоритет 2. Например: 2.
В интернете видел как некоторые юзают:
YOUR_SECTION_HERE /YOUR_MOUNT_PATH_HERE TYPE_FS_HERE defaults,nofail DUMP_HERE PASS_HERE
Где:
- YOUR_SECTION_HERE — это название раздела. Например: /dev/xvdf. Получить можно с помощью утилиты lsblk.
Ну что, отмонтируем волюму:
# umount /YOUR_MOUNT_PATH_HERE
И примонтируем все:
# mount -a
Работа с AWS EBS в Unix/Linux (Terraform)
Так же, можно написать Терраформ модуль для работы с AWS EBS. У меня он уже имеется и его можно стянуть:
$ git clone git@github.com:SebastianUA/terraform.git
В данном репозитории лежат все мои модули что я писал. Конечно же, там есть и для работы с AWS EBS.
Работа с AWS EBS в Unix/Linux (Python + boto3)
Написал скрипт (Название скрипта будет ebs_volumes.py) и его содержание:
#!/usr/bin/env python3# -*- coding: utf-8 -*-import argparseimport boto3import timeimport refrom ec2_metadata import ec2_metadataclass bgcolors:def __init__(self):self.colors = {'PURPURE': '