Автор: Роман Мамедов.
Оригинал: «mhddfs: join several real filesystems together to form a single larger one», 25 мая 2008 г.
Пусть имеются три диска: на 80, 40 и 60 Гб; и 150 Гб аудиофайлов, которые нужно разместить на дисках. Как вы это сделаете?
Раньше я знал о двух решениях: создать
Однако первый подход довольно утомительный: нужно определить, как распределять данные по дискам и помнить, что где хранится. Допустим, нужно будет хранить классическую музыку на первом диске, а рок-музыку — на втором. Потом первый диск внезапно заполняется, а втором остается много свободного места. Теперь нужно обменять файлы на дисках, либо переходить между ними при помощи символьных ссылок.
RAID хотя и решает проблему, но всегда приводит к значительным потерям либо в надежности хранения, либо в доступном дисковом пространстве.
Но недавно я нашел более удачное решение для таких задач: mhddfs. Это модуль FUSE, позволяющий комбинировать файловые системы в одну большую виртуальную, содержащую все файлы компонентов, а также всё их свободное пространство. Более того, в отличие от прочих сходных модулей (unionfs?), mhddfs не ограничивает возможность добавления новых файлов в комбинированную файловую систему и разумно определяет, где эти файлы хранить.
Пусть три жестких диска монтированы в /mnt/hdd1, /mnt/hdd2 и /mnt/hdd3. Тогда у вас должно быть что-то такое:
$ df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/sda1 80G 50G 30G 63% /mnt/hdd1
/dev/sdb1 40G 35G 5G 88% /mnt/hdd2
/dev/sdc1 60G 10G 50G 17% /mnt/hdd3
После установки пакета mhddfs можно будет создать новую точку монтирования /mnt/virtual, объединяющую все диски. Благодаря FUSE для этого не нужно иметь привилегии суперпользователя (нужно только входить в группу fuse), но здесь для простоты положим, что вы вошли как root.
# mkdir /mnt/virtual
# mhddfs /mnt/hdd1,/mnt/hdd2,/mnt/hdd3 /mnt/virtual -o allow_other
option: allow_other (1)
mhddfs: directory '/mnt/hdd1' added to list
mhddfs: directory '/mnt/hdd2' added to list
mhddfs: directory '/mnt/hdd3' added to list
mhddfs: move size limit 4294967296 bytes
mhddfs: mount point '/mnt/virtual'
Опция «-o allow_other» здесь означает, что результирующая файловая система должна быть видна всем пользователям, а не только своему создателю.
В итоге получим:
$ df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/sda1 80G 50G 30G 63% /mnt/hdd1
/dev/sdb1 40G 35G 5G 88% /mnt/hdd2
/dev/sdc1 60G 10G 50G 17% /mnt/hdd3
mhddfs 180G 95G 85G 53% /mnt/virtual
Как видите, была создана новая файловая система, объединяющая емкости дисков. Если вы посмотрите /mnt/virtual, то увидите там файлы со всех трех дисков и наложенные друг на друга структуры директорий.
Но что если попытаться записать файлы в /mnt/virtual? Ну, это довольно хитрый вопрос, и, должен признать, автор mhddfs решил его очень хорошо. Когда вы создаете новый файл в виртуальной файловой системе, mhddfs проверяет свободное пространство на всех дисках. Если на первом диске достаточно места, то файл размещается там. Иначе, если на диске места мало (меньше значения параметра mlimit — по умолчанию 4 Гб), будет использован второй диск. Если и он занят, то будет использован третий. Если же на всех дисках свободное пространство не превышает mlimit, то используется диск, где свободного пространства больше.
Кроме того, если если на середине записи какой-то диск заполняется (допустим, вы попытались создать очень большой файл), то запись не отменяется, и mhddfs просто перемещает данные на другой диск (где больше свободного места). Всё это полностью прозрачно для приложения, записывающего файл.
Теперь можно просто работать с файлами в /mnt/virtual, не заботясь о том, что берется с какого диска, и о прочих вещах; также можно просто переместить туда новые файлы и не думать, где они на деле будут храниться.
Если нужно создавать точку монтирования автоматически при каждой загрузке, то можно добавить такую строчку в /etc/fstab:
mhddfs#/mnt/hdd1,/mnt/hdd2,/mnt/hdd3 /mnt/virtual fuse defaults,allow_other 0 0
Подробности смотрите в man mhddfs.
В дальнейшем, если потребуется, то закончить работу с mhddfs и не потерять данные или структуру директорий будет просто. Допустим, вы купили новый жесткий диск на 500 Гб и хотите продать старые маленькие диски. Просто подключите новый диск и скопируйте на него содержимое /mnt/virtual, после чего удалите точку монтирования mhddfs и отсоедините старые диски. Вся виртуальная структура файлов будет зафиксирована на настоящем диске. И, благодаря тому, что сами файлы не разделяются на части для разных дисков, даже если mhddfs вдруг перестанет работать (что маловероятно), то всё равно можно будет копировать данные со всех трех дисков в один каталог и получить ту же структуру, что и была на /mnt/virtual.
Пакет mhddfs есть в тестовой и нестабильной ветке Debian; в Ubuntu его пока нет.
Автор: Андрас Хорфат.
Оригинал: «potrace: Transform bitmap images into vector graphics», 19 мая 2008 г.
Иногда можно столкнуться с необходимостью получить из какого-то изображения материал высокого разрешения. Если вы не иллюстратор, то может понадобиться получить результат хорошего качества из графики с низким разрешением, так чтобы его можно было как угодно увеличивать, а элементы при этом сглаживались.
Без специальных программ отрисовки можно сделать следующее: взять растровый редактор вроде GIMP, изменить размеры изображения с применением лучшего метода сглаживания, а потом добавить выборочное размытие. Чаще всего это не дает удовлетворительных результатов.
Есть маленькая, но мощная утилита potrace, написанная Питером Селинджером, профессором математики из университета Dalhousie.
Программы отрисовки (trace) вроде potrace принимают на входе растровое изображение и создают из него изображение в формате SVG. potrace даже поддерживает вывод в PDF.
Пример для командной строки:
$ potrace -s image.bmp
При этом программа преобразует пиксели изображения в закрашенные фигуры, которые выглядят гладкими при любом масштабе.
В моем личном опыте работы иллюстратором potrace давал очень хорошие результаты для многих изображений. Если входное изображение имело острые элементы, то potrace передавал их, в то время как дорогое патентованное ПО давало плохие результаты, сглаживая края; требовалось много ручной правки.
Преимущества potrace относительно других программ:
Минусы:
Вот пример входного и выходного изображения, который можно найти на домашней странице проекта:

Пакет давно есть и в Debian, и в Ubuntu.
Автор: Штефан Виндм.
Оригинал: «kteatime - Small tray utility which reminds you of steeping tea», 11 мая 2008 г.
Для кого-то единственным напитком, который можно пить за компьютером, является кофе. Для тех же, кто иногда наслаждаетя чашечкой чая, может пригодиться kteatime.
Думаю, всем знакома ситуация: вода только вскипела, вы кладете в чашку зеленый чай, заливаете водой, возвращаетесь к делам... и уже 15 минут спустя понимаете, что забыли про чай, и спасти его может только множество кубиков сахара ;-)
kteatime не даст такому случиться и будет показывать в трее небольшой таймер.

После выбора подходящего вида чая и запуска отсчета, вы увидите маленький кружок, меняющий цвет от красного до зеленого. На всплывающей подсказке будет время, оставшееся до конца заварки.
Когда чай готов, kteatime отображает небольшое сообщение и воспроизводит сигнал. Можно еще указать команду, которую нужно запустить.

Для меня kteatime — единственная причина, если не считать k3b, чтобы держать в системе библиотеки KDE. Программа хорошо работает и в XFCE.
kteatime есть в Debian, начиная с Sarge (если не раньше), а также во всех версиях Ubuntu.
Автор: Флорис Брайнуж.
Оригинал: «cu: Simple serial communication program», 4 мая 2008 г.
Если у вас есть серверы, встроенные системы, высокопроизводительные маршрутизаторы (или старые ПК, выполняющие подобную работу), то скорее у них будет консоль на последовательном порте, нежели дисплей с клавиатурой. Даже если обычно для захода на эти машины вы используете ssh(1) или что-то подобное, то в сеансах отладки и восстановления часто требуется посмотреть консольные сообщения, отключить сетевой интерфейс или поработать с загрузчиком (например, выбрать в grub альтернативное ядро). Тогда нужен кабель нулевого модема (обычно прилагается производителями, если они используют для последовательной консоли разъем RJ45 вместо RS232) для соединения последовательного порта вашего компьютера с последовательной консолью устройства.
Также нужна программа для т. н. «последовательной связи», которая может соединиться с последовательным портом и позволяет использовать локальный терминал как консоль подсоединенного устройства. Однако большинство программ для последовательной связи создано во времена, когда работа с сетью шла через модем (поключенный к последовательному порту) для дозвона до других систем. В результате, у них, как правило, тяжелые интерфейсы со всей специфической для модемов функциональностью. Здесь поможет cu — очень простая программа, дающая минимально необходимую базу.
Для описанного выше простейшего случая она вызывается так:
$ cu -l /dev/ttyS0
Вот пример, как я подключаюсь к домашнему маршрутизатору (хотя обычно я бы использовал apt-get через ssh):
flub@laurie:~$ cu -l /dev/ttyS1
Connected.
Debian GNU/Linux 4.0 balder ttyS0
balder login: root
Password:
Last login: Sun Apr 13 19:58:46 2008 on ttyS0
balder:~# apt-get update
...
balder:~# apt-get upgrade
...
balder:~# logout
Debian GNU/Linux 4.0 balder ttyS0
balder login: ~.
Disconnected.
flub@laurie:~$
Как можно видеть, я использовал второй последовательный порт (ttyS1) локального компьютера laurie для соединения с первым последовательным портом (ttyS0) маршрутизатора balder, настроенного для работы getty. Это позволяет мне войти в систему и сделать всё что нужно, как с любого другого терминала. Отсоединение производится как и по умолчанию в ssh — вводом «~.» и переводом строки.
Выше соединение осуществляется через последовательную линию, настроенную на скорости 9 600 бод, с 8 битами данных, без проверки по четности, с 1 стоповым битом. Скорее всего, это будет соответствовать параметрам устройства по умолчанию. Однако иногда это довольно медлено, и можно настроить сервер (или другое устройство) для работы на большей скорости, либо такая настройка уже осуществлена производителем, и нужная скорость обозначена в документации. Скорость просто меняется другим аргументом командной строки:
$ cu -l /dev/ttyS0 -s 150000
Если хотите поменять четность, то используйте -e (чет) или -o (нечет). К сожалению, стоповые биты и биты данных нельзя поменять аргументами командной строки, но это и требуется крайне редко.
В cu есть несколько дополнительных опций, а также команд, начинающихся с экранирующего символа «~». Впрочем, большинство из них связаны с модемами для дозвона до других систем и не применимы для нулевого модема. Подробное описание специфических возможностей есть в странице руководства cu(1).
Да, если вам уже не довелось иметь в наличии последовательный порт (так обстоит с многими современными лэптопами), то USB-заглушка для последовательного порта — обычно /dev/ttyUSB0.