Постановка задачи: подключить новый жесткий диск, создать на нём ext4 раздел и смонтировать его через fstab по UUID.
Так уж сложилось, что часто, когда Вы запускаете виртуальные сервер разработки, Вы не можете предугадать сколько места на жёстком диске Вам может потребоваться. В таком случае, необходимо создать новый жесткий диск в настройках виртуальной машины перед ее запуском и потом выполнить операции, описанные ниже в этой статье. Эти-же инструкции имеют место быть и при подключении реального жёсткого диска к физической машине-серверу.
1. Создание нового раздела на жёстком диске
Для начала, определим имя свеже-подключённого жесткого диска в системе:
root@server:/# fdisk -l Disk /dev/sda: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders, total 16777216 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00078170 Device Boot Start End Blocks Id System /dev/sda1 * 2048 15988735 7993344 83 Linux /dev/sda2 15990782 16775167 392193 5 Extended /dev/sda5 15990784 16775167 392192 82 Linux swap / Solaris Disk /dev/sdb: 6442 MB, 6442450944 bytes 255 heads, 63 sectors/track, 783 cylinders, total 12582912 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdb doesn't contain a valid partition table
Как видно, новый жёсткий диск доступен под именем /dev/sdb и не имеет еще никаких разделов (Disk /dev/sdb doesn't contain a valid partition table). Исправим это, используя cfdisk (Утилита из пакета gpart, установите её по-необходимости командой apt-get install gpart).
Далее, создадим новый раздел ext4 на нашем новом жёстком диске, который займёт всё доступное место.
root@server:/# cfdisk /dev/sdb
По-этапно, создание одного раздела размером на весь жёсткий диск выглядит так, как показано на рисунке ниже:
> 1.New -> 2.Primary -> 3.Specify size in MB > 4.Write -> 5.yes > 6.Quit
Проверим теперь наши разделы:
root@server:/# fdisk -l Disk /dev/sda: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders, total 16777216 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00078170 Device Boot Start End Blocks Id System /dev/sda1 * 2048 15988735 7993344 83 Linux /dev/sda2 15990782 16775167 392193 5 Extended /dev/sda5 15990784 16775167 392192 82 Linux swap / Solaris Disk /dev/sdb: 6442 MB, 6442450944 bytes 64 heads, 48 sectors/track, 4096 cylinders, total 12582912 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 63 12582911 6291424+ 83 Linux
2. Форматирование нового раздела в ext4
Для этого используем утилиту mkfs.ext4 из библиотеки e2fslibs для работы с файловыми системами ext2/ext3/ext4. (По-необходимости, установите пакет с помощью комманды apt-get install e2fslibs)
root@server:/# mkfs.ext4 /dev/sdb1 mke2fs 1.42.5 (29-Jul-2012) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 393216 inodes, 1572856 blocks 78642 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1610612736 48 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
3. Создание точки монтирования и настройка монтирования в fstab, используя UUID
Ввиду того, что виртуальная машина для разработки имеет один раздел на всё, в нашем, частном случае, появилась необходимость вынести папку /home на новый жесткий диск. Для этого проделаем следующие операции от суперпользователя (root):
root@server:/# mv /home /oldhome root@server:/# mkdir /home
Примечание: не ребутайтесь до завершения всех операций, дабы исключить возможный гемор. Кстати, в ином, чисто академическом случае — просто создайте произвольную папку mkdir /newhdd и настраивайте монтирование в неё.
Естественно, для того, чтобы настроить монтирование по UUID (Universally Unique Identifier), нам необходимо узнать этот код для нового раздела. Для этого используем утилиту blkid (пакет libblkid1):
root@server:/# blkid /dev/sda5: UUID="0feb8a2f-6359-4cd3-a9ab-0a44857d71cc" TYPE="swap" /dev/sda1: UUID="b2c5503e-d2dc-49ee-8f1c-d4ed6eb90497" TYPE="ext4" /dev/sdb1: UUID="9d2bf5ca-68a8-47a9-8766-ac417d4b12d6" TYPE="ext4"
Теперь, используя наш UUID=9d2bf5ca-68a8-47a9-8766-ac417d4b12d6 добавим новый диск/раздел в наш файл /etc/fstab, для того чтобы он монтировался автоматически при запуске нашей ОС:
root@server:/# echo "UUID=9d2bf5ca-68a8-47a9-8766-ac417d4b12d6 /home ext4 errors=remount-ro 0 1" >> /etc/fstab
Непосредственно для монтирования раздела "на-горячую" выполним команду:
root@server:/# mount /home
И напоследок вернём содержимое папки /oldhome на старое место:
root@server:/# mv /oldhome/* /home
Примечание: укажите именно mv /oldhome/* /home при переносе содержимого папки, чтобы перенести именно содержимое папки, а не её саму. Обязательно после переноса проверьте права на папки пользователей внутри корневой папки home, иначе у Вас могут возникнуть проблемы со входом в систему при последующей перезагрузке (доступ к папкам .ssh, если Вы используете авторизацию по ключам).
После успешного переноса, пустую папку можно удалить:
root@server:/# rmdir /oldhome
Проверим теперь нашу структуру разделов и доступное место:
root@server:/# df -h Файловая система Размер Использовано Дост Использовано% Cмонтировано в rootfs 7,6G 5,3G 1,9G 74% / udev 10M 0 10M 0% /dev tmpfs 151M 644K 151M 1% /run /dev/disk/by-uuid/b2c5503e-d2dc-49ee-8f1c-d4ed6eb90497 7,6G 5,3G 1,9G 74% / tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 378M 268K 378M 1% /run/shm /dev/disk/by-uuid/9d2bf5ca-68a8-47a9-8766-ac417d4b12d6 6,0G 1,8G 3,9G 31% /home
Всё настроено верно и проблема со свободным местом успешно решена. Теперь можно, перекрестясь, перезапустить систему и убедиться что всё работает как должно!