Тесты показали, что лучше создавать шифрованные диски с заданным размером сектора. В моем случае размер сектора 4096 байт дал прирост скорости чтения в полтора раза. При этом скорость записи осталась прежней - на уровне 21-22МБ в секунду.
пятница, 16 сентября 2011 г.
ZFS и geli
четверг, 15 сентября 2011 г.
Создание шифрованного пула zfs в FreeBSD
Для шифрования в ядре FreeBSD есть GELI.
Достаточно быстрая и надежная штука.
Мне надо создать сервер, на котором будут хранится данные, доступ к которым не смогут получить нежелательные люди.
[root@new /]# geli init /dev/gpt/0disk2t
Enter new passphrase:
Reenter new passphrase:
Metadata backup can be found in /var/backups/gpt_0disk2t.eli and
can be restored with the following command:
# geli restore /var/backups/gpt_0disk2t.eli /dev/gpt/0disk2t
[root@new /]# geli init /dev/gpt/1disk2t
Enter new passphrase:
Reenter new passphrase:
Metadata backup can be found in /var/backups/gpt_1disk2t.eli and
can be restored with the following command:
# geli restore /var/backups/gpt_1disk2t.eli /dev/gpt/1disk2t
[root@new /]#
Enter new passphrase:
Reenter new passphrase:
Metadata backup can be found in /var/backups/gpt_0disk2t.eli and
can be restored with the following command:
# geli restore /var/backups/gpt_0disk2t.eli /dev/gpt/0disk2t
[root@new /]# geli init /dev/gpt/1disk2t
Enter new passphrase:
Reenter new passphrase:
Metadata backup can be found in /var/backups/gpt_1disk2t.eli and
can be restored with the following command:
# geli restore /var/backups/gpt_1disk2t.eli /dev/gpt/1disk2t
[root@new /]#
Далее надо подключить шифрованные диски в систему для создания пула:
[root@new /]# geli attach /dev/gpt/0disk2t
Enter passphrase:
[root@new /]# geli attach /dev/gpt/1disk2t
Enter passphrase:
[root@new /]#
Enter passphrase:
[root@new /]# geli attach /dev/gpt/1disk2t
Enter passphrase:
[root@new /]#
Затем создать пул:
[root@new /]# zpool create data1 raidz /dev/gpt/0disk2t.eli /dev/gpt/1disk2t.eli
Сразу же решил проверить скорость записи, которая была на нешифрованном пуле в районе 32-34МБ в секунду, а скорость чтения была на уровне 86-95МБ в секунду.
Результаты такие:
[root@new /data1]# dd if=/dev/random of=5G bs=1024 count=5123600
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 255.912170 secs (20501434 bytes/sec)
[root@new /data1]# dd if=5G of=/dev/null bs=10245123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 255.912170 secs (20501434 bytes/sec)
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 147.344312 secs (35607526 bytes/sec)
[root@new /data1]#
Скорость стала заметно ниже и на чтении и на записи. Эх... что не сделаешь ради безопасности данных. :)
Запуск системы с zfs пулом из шифрованных дисков.
Я сомневался, что данные будут доступны в пуле raidz, если один из двух дисков будет недоступен. Поэтому до установки в бой решил провести тест.Создал в пуле файл, сохранил его md5 сумму.
Перегрузил сервер с пулом data1 (см. выше).
После старта запустил команды:
[root@new ~]# geli attach /dev/gpt/0disk2t
[root@new ~]# zfs mount data1
и посмотрел на содержимое пула.Файл с правильной суммой был на месте! Ура!
Однако zpool status ругался:
[root@new ~]# zpool status
pool: data1
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://www.sun.com/msg/ZFS-8000-2Q
scan: none requested
config:
NAME STATE READ WRITE CKSUM
data1 DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
gpt/0disk2t.eli ONLINE 0 0 0
gpt/1disk2t.eli UNAVAIL 0 0 0 cannot open
errors: No known data errors
pool: data1
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://www.sun.com/msg/ZFS-8000-2Q
scan: none requested
config:
NAME STATE READ WRITE CKSUM
data1 DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
gpt/0disk2t.eli ONLINE 0 0 0
gpt/1disk2t.eli UNAVAIL 0 0 0 cannot open
errors: No known data errors
Я ввел правильно пароль и подключил шифрованный диск 1disk2t.eli.
Дал команду:
[root@new ~]# zpool online data1 gpt/1disk2t.eli
И пул у меня стал снова ONLINE!
Ура!
Можно не боятся потери
Попробую сервер в тестовый бой поставить и посмотреть результаты.
Замерял скорость записи и чтения в zfs/mfs
Привет!
Довелось мне собрать сервер FreeBSD 8.2-STABLE за сентябрь 2011 года для одной организации. Было свободное время для теста.
Решил провести измерения скорости чтения и записи с дисков в разных вариантах создания пула zfs.
Диски, которые я использовал:
ad5: 1907729MB <Seagate ST32000641AS CC13> at ata2-slave UDMA100 SATA
ad7: 1907729MB <Seagate ST32000641AS CC13> at ata3-slave UDMA100 SATA
ad7: 1907729MB <Seagate ST32000641AS CC13> at ata3-slave UDMA100 SATA
Материнка на этом сервере старая, поэтому и не включено и не используется ahci и поэтому диски adX, а не adaX.
Процессор и память на сервере:
avail memory = 4093345792 (3903 MB)
Сперва я создал два диска в системе для простого пула zfs со всем доступным объемом и создаю пул:
ad5p1 added
[root@new /]# gpart add -t freebsd-zfs -l 1disk2t ad7
ad7p1 added
[root@new /]# zpool create data1 /dev/gpt/0disk2t /dev/gpt/1disk2t
[root@new /]# zpool status data1
pool: data1
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
data1 ONLINE 0 0 0
gpt/0disk2t ONLINE 0 0 0
gpt/1disk2t ONLINE 0 0 0
errors: No known data errors
[root@new /]#
Далее в пул данных я решил записать и прочитать 5Гб данных из /dev/random (для полноты теста) одинаковыми блоками по 1024 байт:
[root@new /data1]# dd if=/dev/random of=5G bs=1024 count=5123600
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 153.215957 secs (34242950 bytes/sec)
[root@new /data1]# dd if=/dev/random of=5G bs=1024 count=5123600
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 154.269003 secs (34009207 bytes/sec)
[root@new /data1]# dd if=5G of=/dev/null bs=1024
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 55.372681 secs (94750088 bytes/sec)
[root@new /data1]# dd if=5G of=/dev/null bs=1024
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 51.155295 secs (102561551 bytes/sec)
[root@new /data1]#
Процессор и память на сервере:
Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz (2402.36-MHz K8-class CPU)
real memory = 4294967296 (4096 MB)avail memory = 4093345792 (3903 MB)
Сперва я создал два диска в системе для простого пула zfs со всем доступным объемом и создаю пул:
[root@new /]# gpart create -s gpt ad5
ad5 created
[root@new /]# gpart create -s gpt ad7
ad7 created
[root@new /]# gpart add -t freebsd-zfs -l 0disk2t ad5ad5 created
[root@new /]# gpart create -s gpt ad7
ad7 created
ad5p1 added
[root@new /]# gpart add -t freebsd-zfs -l 1disk2t ad7
ad7p1 added
[root@new /]# zpool create data1 /dev/gpt/0disk2t /dev/gpt/1disk2t
[root@new /]# zpool status data1
pool: data1
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
data1 ONLINE 0 0 0
gpt/0disk2t ONLINE 0 0 0
gpt/1disk2t ONLINE 0 0 0
errors: No known data errors
[root@new /]#
Далее в пул данных я решил записать и прочитать 5Гб данных из /dev/random (для полноты теста) одинаковыми блоками по 1024 байт:
[root@new /data1]# dd if=/dev/random of=5G bs=1024 count=5123600
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 153.215957 secs (34242950 bytes/sec)
[root@new /data1]# dd if=/dev/random of=5G bs=1024 count=5123600
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 154.269003 secs (34009207 bytes/sec)
[root@new /data1]# dd if=5G of=/dev/null bs=1024
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 55.372681 secs (94750088 bytes/sec)
[root@new /data1]# dd if=5G of=/dev/null bs=1024
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 51.155295 secs (102561551 bytes/sec)
[root@new /data1]#
Таким образом средняя скорость записи получилась 34126078.5 байт в секунду, а чтения 98655819.5 байт в секунду.
Далее я создал пул mirror с этих же дисков и провел точно такие же эксперименты. Средняя скорость за два запуска dd вышла для записи 33746148.5 байт в секунду, а для чтения 75503666.0 байт в секунду.
Я попробовал пул из одного диска, средние скорости записи и чтения вышли 33665851.5 и 97765927.0 байт в секунду.
Потом сделал пул с одним из дисков, а второй диск отдал под log. Опять провел два запуска для записи и для чтения. Средняя скорость в этот раз вышла для записи 34071757.5 байт в секунду, а для чтения
96930171.0 байт в секунду.
Еще сделал пул с одним диском, а второй отдал под cache. Средняя скорость записи 33854437.5, а чтения - 49479337.0 байт в секунду.
Создал пул raidz из двух дисков. Средние скорости записи и чтения вышли: 33169249.0 и 84283989.0 байт в секунду.
Создал пул raidz с кэшем в RAM:
Cредняя скорость записи вышла 32541843.5 байт в секунду, а чтения 84148245.5 байт в секунду.
Попробовал еще 128М из памяти добавить для log. Итого, пул получился raidz с cache и log по 128М. Средняя скорость записи вышла 32503220.0, а чтения - 84458088.0 байт в секунду.
Попробовал создать пул raidz с кешем 1024М. Существенного отличия в скоростях не получил.
Примонтировал /dev/md0 в /mnt. Попробовал там на размере в 900М те же тесты. И получил среднюю скорость записи 50817911.0, а чтения - 531232665.5 байт в секунду. Вау! :)
бойца диска. Поэтому остается mirror или raidz. Я выбрал второй вариант - raidz. Тем, кому нужен пул без всякой надежности на случай выхода из строя диска(-ов), то лучше всего использовать простой пул из дисков, он дает полный объем всех дисков и высокую скорость. Тем, кто создает надежный пул лучше использовать raidz и несколько дисков. Для быстрых файловых систем остается только использовать memory disk из RAM, минус которой пока только один - не сохраняется ничего после перезагрузки.
Далее я создал пул mirror с этих же дисков и провел точно такие же эксперименты. Средняя скорость за два запуска dd вышла для записи 33746148.5 байт в секунду, а для чтения 75503666.0 байт в секунду.
Я попробовал пул из одного диска, средние скорости записи и чтения вышли 33665851.5 и 97765927.0 байт в секунду.
Потом сделал пул с одним из дисков, а второй диск отдал под log. Опять провел два запуска для записи и для чтения. Средняя скорость в этот раз вышла для записи 34071757.5 байт в секунду, а для чтения
96930171.0 байт в секунду.
Еще сделал пул с одним диском, а второй отдал под cache. Средняя скорость записи 33854437.5, а чтения - 49479337.0 байт в секунду.
Создал пул raidz из двух дисков. Средние скорости записи и чтения вышли: 33169249.0 и 84283989.0 байт в секунду.
Создал пул raidz с кэшем в RAM:
[root@new /]# mdconfig -a -t malloc -s 128M
md0
[root@new /]# zpool create data1 raidz /dev/gpt/0disk2t /dev/gpt/1disk2t cache /dev/md0
Cредняя скорость записи вышла 32541843.5 байт в секунду, а чтения 84148245.5 байт в секунду.
Попробовал еще 128М из памяти добавить для log. Итого, пул получился raidz с cache и log по 128М. Средняя скорость записи вышла 32503220.0, а чтения - 84458088.0 байт в секунду.
Попробовал создать пул raidz с кешем 1024М. Существенного отличия в скоростях не получил.
Примонтировал /dev/md0 в /mnt. Попробовал там на размере в 900М те же тесты. И получил среднюю скорость записи 50817911.0, а чтения - 531232665.5 байт в секунду. Вау! :)
Выводы, которые я сделал.
Скорость записи на диски SATA в режиме UDMA100 не будет выше 32-34МБ в секунду. Хоть тресни! А вот скорость чтения в режиме работы mirror оказалась не такой высокой, как ожидалось. Скорость чтения в обычном пуле из двух дисков вышла самая высокая. Но мне для работы нужен надежный пул, который бы смог пережить потерю
Подписаться на:
Сообщения (Atom)