Занимательная GEOM’етрия Евгений Зобнин ака j1m Хакер, номер #096, стр. 096-116-3 # mdconfig -a -t vnode -f disk.ufs -u 0 # bsdlabel -w md0 auto # newfs -m 0 -i 1024 md0c # mount /dev/md0c /mnt Заполняем виртуальный диск содержимым: # cp -R ~/documents /mnt Отключаем образ: # umount /mnt # mdconfig -d -u 0 Сжимаем содержимое виртуального диска и вновь подключаем его: # kldload geom_uzip # mkuzip disk.ufs # mdconfig -a -t vnode -f disk.ufs.uzip -u 0 # mount -r /dev/md0.uzip /mnt Руки прочь от частной собственности В ядре FreeBSD версии 6.1 можно найти 2 класса, осуществляющих низкоуровневое шифрование дисков. Первый называется gbde (Geom Based Disk Encryption). Он способен шифровать диски или разделы алгоритмом AES с симметричным ключом длиной от 128 бит. Второй, с более запоминающимся и легко произносимым названием geli, более совершенен и универсален. Класс geli может использовать специализированное оборудование для шифрования (в gbde поддержка такого железа неполная), позволяет выбирать алгоритм шифрования (AES, Blowfish или 3DES), использовать 2 независимых ключа и шифровать корневой раздел диска (во время загрузки пользователю будет предложено ввести пароль). Пример использования класса geom_bde Инициализация: # kldload geom_bde # gbde init ad1 Создаем файловую систему: # gbde attach ad1 # dd if=/dev/random of=/dev/ad1.bde bs=64k # newfs /dev/ad1.bde # gbde detach ad1 Подключаем шифрованный диск: # gbde attach ad1 # mount /dev/ad1.bde /secret Класс geli, в отличие от gbde, позволяет создать ключ из нескольких компонентов. В примере, приведенном ниже, мы используем пароль в комбинации с набором из случайных байтов в качестве основы для ключа Blowfish. При необходимости файл можно переместить на USB-флешку и спрятать ее в цветочном горшке. Пример использования класса geom_eli Инициализация: # kldload # dd if=/dev/random of=~/ad1.key bs=64 count=1 # geli init -s 4096 -K ~/ad1.key -a Blowfish /dev/ad1 Создаем файловую систему: # geli attach -k ~/ad1.key ad1 # dd if=/dev/random of=/dev/ad1.eli bs=64k # newfs /dev/ad1.eli # geli detach ad1.eli Подключаем шифрованный диск: # geli attach -k ~/ad1.key /dev/ad1 # mount /dev/ad1.eli /mnt/secret Интересной особенностью класса geli является также и то, что он способен генерировать специальные одноразовые ключи для шифрования разделов swap или временных файловых систем. Никаких источников для генерации ключа, будь то пароль или файл с беспорядочным набором байтов, при этом не требуется. # dd if=/dev/random of=/dev/ad0s1b bs=64k # geli onetime -d -a 3des ad0s1b # swapon /dev/ad0s1b.eli Дисковая магия К сожалению, в рамках одной статьи невозможно описать все возможности GEOM по организации RAID-массивов. Поэтому мы остановимся только на RAID-1, как наиболее популярном и дешевом варианте RAID. За создание томов RAID-1 (зеркал) отвечает класс mirror, управляемый утилитой /sbin/gmirror. Средствами GEOM создать зеркало очень просто, поэтому, не вдаваясь в подробности, рассмотрим пример, который будет актуален в 90% случаев: Пример использования класса geom_mirror Создаем зеркало для текущего диска: |