HowTo

Включение TRIM на SSD с LVM/LUKS

Trim — это полезная ata-команда, которая препятствует деградации производительности SSD-дисков.

Но часто случается, что дистрибутивы не включают ее на разделах.

Первым делом надо ее включить на нативных разделах просто добавив опцию discard к записи в fstab.

UUID=397b890a-c661-47f4-bd2a-2260379f8c6f /boot                   ext4    defaults,discard        1 2

Как поступать с разделами, которые расположены на шифрованных томах или lvm?

Для lvm надо сначала разрешить проброс команды trim к дискам (он запрещен по дефолту).

Правим /etc/lvm/lvm.conf и меняем опцию issue_discards с 0 на 1.

issue_discards = 1

Проверяем

$ sudo fstrim -v /home
 /home: 54,4 GiB (58440941568 bytes) trimmed

Отлично. Но что если разделы расположены на шифрованном томе, который размещен в lvm?

Важно: включение trim для зашифрованных томов может ослабить безопасность шифрования! Так как по перемещенным блокам можно сделать вывод о том, какая файловая система используется.

В /etc/crypttab нужно добавить опцию allow-discard.

luks-xxx UUID=some-uuid none allow-discards

для debian-based дистрибутивов строчка немного меняется

luks-xxx UUID=some-uuid none luks,discard

Теперь надо пересобрать initramfs.

Для rpm-based

$ sudo dracut --force

У fedora 18 есть баг из-за которого нужно указывать пусть к crypttab

$ sudo dracut --force -I /etc/crypttab

Проверим, что ctypttab был успешно добавлен в initrd.

$ sudo lsinitrd |grep crypttab

Теперь нужно заставить систему отправлять trim для томов.

# echo -e "fstrim /\nfstrim /home\nfstrim /boot" > /etc/cron.hourly/fstrim

 

Реклама
Разработка, HowTo

AngularJS: простой прогресс-бар

AngularJS: progressbarАнгуляр — это очень удобная штука. Но еще удобнее, когда она нормально скрещивается с другими фреймворками вроде jQueryUI.
В AngularUI я что-то прогресс-бара не нашел (знаю, искал плохо). Накропал сам.

Фидл с примером работы и исходниками.

JFF

AngularJS: забавная особенность bindonce

Для AngularJS существует модуль bindonce, который позволяет сократить количество вотчеров и тем самым ускорить страинцу.

У этого модуля есть директива bo-attr, которая позволяет использовать в качестве атрибута элемента любое нужное нам значение. В качестве значения выступает выражение, которое будет проинтерпретировано и добавлено в dom.

Однако, у этой директивы есть забавное поведение, которое связано с особенностями интерпретации.

$scope.title = 'some text with $peci@l chars'
$scope.title_ref = 'title'
$scope.title_title_ref = 'title_ref'
<a bo-attr="" bo-attr-title="title">anchor1</a>
<a bo-attr="" bo-attr-title="{{title_ref}}">anchor2</a>
<a bo-attr="" bo-attr-title="'{{title}}'">anchor3</a>
<a bo-attr="" bo-attr-title="{{title_title_ref}}">anchor4</a>

Как думаете, что выведется в каждом случае? 🙂

Фидл с примером.

HowTo

tc-play. Небольшая памятка про криптоконтейнеры

Вокруг truecrypt какая-то нездоровая шумиха. Кто-то даже на трояны намекает в версии 7.1а. Так что можно попробовать свободные форки TC. Например tc-play.

Набросал себе памятку по мануалу (вы не подумайте, я их не не читаю :)).

$ sudo losetup /dev/loop1 <path to file> # делаем лупбек на файл с контейнером
$ sudo tcplay -m tc0 -d /dev/loop1 -e # делаем криптоустройство внешнего контейнера и заодно защищам скрытый том (если есть) от перезатирания
$ sudo tcplay -m tc1 -d /dev/loop1 # маппим скрытый контейнер (передаем пасс скрытого устройства

Дальше остается только примонтировать появившиеся /dev/tc* куда надо. А за остальным в мануал.

Разработка, HowTo

PHP: указываем include_path в качестве аргумента

Не люблю, когда в глобальном конфиге на рабочей машине появляются include_path, которых там быть не должно (например они ведут в локальную папку пользователя).

Делаем алиас и не заморачиваемся 🙂

$ alias "php=/usr/bin/php -d ""include_path='.:/usr/share/pear:/another/include/path'"""
$ php -r "print ini_get('include_path');" 
.:/usr/share/pear:/another/include/path

И можно заставлять работать таким образом разные комманд-лайн утилиты, которым позарез нужен include_path с нашими локальными либами.

HowTo

Linux: именованные каналы

Для взаимодействия между различными процессами в *nix можно создавать именованные каналы, которые позволяют перенапрявлять ввод/вывод.

В одном терминале

$ mkfifo named_pipe
$ gzip -9 -c < named_pipe > out.gz &

В другом

echo Hello, world! > named_pipe

Теперь мы можем увидеть полученный файл.

$ zcat out.gz 
Hello, world!
Пример использования именованных каналов в linux
Пример использования именованных каналов в linux

И удалить именованный канал

$ rm named_pipe