Принтеры в Linux, или Как настроить печать в Linux с помощью CUPS



35 коммент.
Задача: установка принтера в Linux и печать в Linux с помощью CUPS, выводить на печать документы через локально подключённые принтеры.
Решение: требуется установить систему печати CUPS и добавить принтер, на что требуется не больше минуты - после этого принтер в Linux будет печатать.


Няня, где же кружка... или Ставим CUPS
На самом деле
CUPS [?] с кружками и спиртным он ничего общего не имеет. Перед тем, как его ставить, хорошо бы посмотреть на поддержку ваших принтеров. Если с поддержкой полный порядок, ставим следующие пакеты:
aptitude install cupsys gs-esp foomatic-bin foo2zjs cups-pdf
вместе со всеми зависимостями. Последний пакет,
cups-pdf, добавляет возможность печатать сразу в PDF из любой программы в Linux. Важно поставить не только сам CUPS, но и программы, которые он использует, имеющие не вполне очевидные названия.

Кстати, весьма распространённая ошибка: ставят только cupsys, или забывают foo2zjs, в результате чего при отправке задания на печать из принтера ничего не вылезает, а в логах вот такие записи:
I [23/Aug/2005:14:41:46 +0400] Adding end banner page "none" to job 7.
I [23/Aug/2005:14:41:46 +0400] Job 7 queued on 'HPDeskJet930C' by 'penta4'.
E [23/Aug/2005:14:41:46 +0400] Unable to convert file 0 to printable format for job 7!
I [23/Aug/2005:14:41:46 +0400] Hint: Do you have ESP Ghostscript installed?
I [23/Aug/2005:14:41:46 +0400] Hint: Try setting the LogLevel to "debug".

Это может отхватить мегабайт 10-20, смотря сколько и чего уже поставлено в системе. Всё поставится, распакуется и настроится - теперь осталось добавить принтер и начать печатать.

В печать!
Подключаем принтер к компьютеру. Например, если у вас принтер с подключением по USB, о подключении можно узнать командой lsusb вот так:
root@dot:/dev# lsusb
Принтер в Linux себя проявит вот так:
Bus 008 Device 003: ID 04e8:3272 Samsung Electronics Co., Ltd
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 002: ID 046d:c52f Logitech, Inc.
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
В данном случае воткнут принтер Samsung CP-300. Чтобы добавить новый принтер или менять опции уже установленного, запускаем любой броузер и в адресной строке набираем:
http://localhost:631
Должна должна появиться страница с настройками принтеров в Linux, что-то вроде показанного на скриншоте:

From Записки дебианщика [beta]

Страница CUPS может долго загружаться, если указаны много других сетевых подключений или неправильно настроен DNS. Если машина локальная, и CUPS очень долго загружается, попробуйте на время вырубить сетевой интерфейс
ifconfig eth0 down
Например, как я подключал свой принтер HP DeskJet 930C в CUPS на Debian 3.1 Sarge. Нажимаем Find New Printers - CUPS должна найти наш принтер и скорее всего найдёт его. Если же принтеров нет, CUPS так об этом и скажет, No Printers - тогда можно нажать на Add printer. Но нам повезло и принтеры нашлись:

From Записки дебианщика [beta]


Далее пишем имя принтера, на латинице и без пробелов:
From Записки дебианщика [beta]

Выбираем драйвер для своей модели принтера:

From Записки дебианщика [beta]



Далее определяемся со способом подключения принтера, в моём случае (USB-шный принтер) соответственно:


Ещё пара кликов - и всё готово, теперь принтер установлен и настроен. Если теперь зайти в Printers, он появится и доложит о своей готовности к печати:

Соответствующими кнопками можно настроить доступные параметры печати: разрешение, размер бумаги и прочее. Всё, после этого принтер у вас появится в пользовательских приложениях. Например, в ОпенОфисе - и на него можно сразу чего-нибудь напечатать.


Печать из GiMP

Для этого потребуется установить ещё несколько пакетов и пожертвовать несколько мегабайт дискового пространства:
aptitude install cupsys-driver-gimpprint gimp-print
поставится и настроится. Теперь запускаем GiMP, открываем любое изображение и жмём Файл - Печать. После этого появится солидных размеров диалог, в котором можно настроить что угодно, относящееся к печати изображений.

Тут есть одни грабельки: по умолчанию gimp-print полагает, что ваш принтер сто пудов postscript-совместимый, что, конечно же, далеко не всегда так. Поэтому не спешите радостно печатать фотографии, иначе вместо них из принтера может поползти многостраничная греко-латинско-французская ересь вместо изображения. Для того, чтобы это не произошло, указываем gimp-print наш принтер явно:

То есть жмём "Настроить принтер", выбираем модель принтера, подтверждаем и сохраняем настройки. Теперь всё должно пойти нормально.

Ссылки
Признаться, когда я ещё на Debian Woody настраивал принтер в Linux, я удивлялся руководствам в сети на эту тему (да-да, я читал руководства, поставляющиеся с CUPS, но читать их стоит после того, как всё работает). Либо это решение уж слишком конкретной проблемы, либо попытка объять необъятное и в итоге мануал ни о чём. Есть общее руководство по установке принтеров, но оно жутко устарело, а это, хотя и свежее, но обзорное. Неплохое руководство здесь и у меня по настройке печати через Samba. Очень хороший перевод документации к CUPS тут, о настройке можно ещё почитать здесь. О поддержке принтеров в Linux можно узнать на официальном сайте CUPS.
Читать далее

Сканер в Linux и настройка SANE: scanner in linux



30 коммент.
Задача: установить сканер в Linux и настроить его.
Решение: для работы со сканнерами в Linux нужно установить SANE [?] и связанные с ним утилиты.

Установка сканера
Всё очень и очень просто: для установки сканера в линукс нужно поставить подсистему
SANE [?]. Для того, чтобы сканировать в консоли (или скриптами), нам нужен только пакет sane, а если хочется ещё и в графических программах сканировать, то ставим ещё и xsane. Итак, ставим:
aptitude install sane xsane
Всё должно поставиться и настроиться - теперь можно поискать сканер. Включаем его в сеть и в соответствующий порт, после чего от рута пишем:
# sane-find-scanner
Эта утилита должна выдать что-то вроде:
# sane-find-scanner will now attempt to detect your scanner. If the
# result is different from what you expected, first make sure your
# scanner is powered up and properly connected to your computer.

# No SCSI scanners found. If you expected something different, make sure that
# you have loaded a SCSI driver for your SCSI adapter.

found USB scanner (vendor=0x04b8 [EPSON], product=0x011b [EPSON Scanner]) at libusb:001:089
# Your USB scanner was (probably) detected. It may or may not be supported by
# SANE. Try scanimage -L and read the backend's manpage.

# Not checking for parallel port scanners.

# Most Scanners connected to the parallel port or other proprietary ports
# can't be detected by this program.
Полужирным выделено искомое - наш сканер опознан, нашёлся и готов радовать нас отличными изображениями. Если сканер не нашёлся, то о
статусе его поддержки можно узнать на официальной странице проекта SANE.

Сканировать может только root?
Есть такая неприятность: по умолчанию только root имеет доступ к сканеру, но это легко исправить. Для этого нужно внести пользователя, под которым хочется сканировать, в группу scanner. Делается это (с рутовыми привилегиями) так:
# gpasswd -a имя_пользователя scanner
заменяя имя_пользователя на логин пользователя. Для того, чтобы изменения вступили в силу, нужно перелогиниться. После этого в консольке (от имени того пользователя, которому хочется сканировать) для проверки пишем:
$ groups
При этом будет выдан список всех групп, в которых пользователь состоит. Например, вот что пишет эта утилита для меня
penta4 dialout cdrom floppy audio video plugdev scanner
Последняя строчка говорит о том, что пользователь penta4 имет право сканировать. Всё, теперь можно запускать GiMP или любую другую программу и сканировать там.

Махмуд, зажигай!

Теперь можно легко и просто сканировать в Gimp. Идём в меню Файл - Захватить - Xsane и видим простой интерфейс сканирования.

Можно так же запустить его отдельно, просто набрав в консольке (или добавив в меню своей графической оболочки) xsane. Полупрозрачным показано первое окно выбора устройства, а дальше появляется окно с параметрами сканирования. В нём масса интересных и нужных настроек. Например, если вы вместо режима "Просмотр" выберете "Файл", то можно сканировать в файлы с постоянно меняющимися названиями: например, file0001.tif, file0002.tif и так далее. Можно прибавлять или отнимать по 1 или 2. И ничего при этом не надо делать руками.

Так же особо обратите внимание на меню "Окна" в XSANE. Там можно вызывать или убирать окна предварительного сканирования, задавать параметры пакетного сканирования, дополнительные настройки (битность изображения, права доступа на сканируемые файлы и прочее).

Примечание:
Некоторые сканеры по умолчанию выставляют размер сканируемой области равной 0, в частности, Umax Astra 2200U. Поэтому
бывает полезно посмотреть доступные параметры сканирования их значения по умолчанию для конкретного сканера (например, --resolution, -x, -y, --gray, --lamp-off ) командой
scanimage --help -d DEVICE
где DEVICE - название сканера, или группы сканеров, поддерживаемых sane. Найти подходящий DEVICE (e.g. umax1220u) можно в разделе BACKENDS FOR SCANNERS руководства $ man sane.

Ссылки:
Про то, как дать возможность сканировать в Linux другим пользователям (кроме рута), сказано здесь и здесь.
Поддержка моделей сканеров в Linux постоянно улучшается, и статус поддержки сканеров можно узнать на официальной странице проекта SANE.
Читать далее

Открытые системы автоматизированного проектирования CAD в Linux: open CAD in Linux



26 коммент.
Частые вопросы - есть ли системы CAD в Linux? Есть, конечно, и многие из них бесплатные и с открытым кодом. Часть проектов брошены, большая часть - всё-таки развиваются и есть надежда на то, что они перерастут в большие проекты. Хотя создание САПР в Linux силами энтузиастов - это, конечно, подвиг, и до уровня Autocad и Solidworks им ещё далеко, но признаемся честно: а многим ли из спрашивающих нужны все возможности Autocad?

Очень часто на форумах спрашивают: есть ли аналог AutoCAD в Линукс? Причём спрашивают явно другое: есть ли версия AutoCAD или SolidWorks в Linux? Это два разных вопроса, между прочим. CAD-системы в Линукс есть, разумеется, и ниже приведён их обзор. Версии AutoCAD в Linux нет - это продукт закрытый и, между прочим, очень недешёвый.
Но хватит лирики: вот обзор открытых, свободных CAD-систем по состоянию на ноябрь 2006 года.

Открытые CAD-системы под Линукс
Есть большой каталог ссылок на CAD-софт, но большая часть из него представляет собой кладбище погибших кораблей. Дело это сложное, неблагодарное и очень трудно конкурировать с навороченными CAD-системами. Ниже приводятся ссылка на живые проекты.

BlenderCAD http://www.blender.org/ --- скрипт на внутреннем скриптовом языке Blender для него же, который расширяет функциональные возможности Blender, так что он может быть использован как CAD-система. Больше можно узнать на release of BlenderCAD и форуме Blender discussion forum. Страница проекта BlenderCAD project page.

BRL-CAD http://brlcad.org/ --- В 1979 года U.S. Army Ballistic Research Laboratory (BRL) проспонсировала разработку компьютерных программ, которые могут помочь в моделировании и имитации задач инженерного анализа боевых систем и окружений. Начиналось всё с отображение и редактирование геометрических моделей. Теперь проект называется BRL-CAD.

Fandango http://www.soffernet.com/jaime/fandango/ --- Скриптовый движок описания 3D-объектов. Написан на C++ но до сих пор не обеспечивает полной работы с CAD-задачами, последняя версия 0.2.6, обновление в 2003 году. Недоделано, и, скорее всего, не будет.

freeCAD http://askoh.com/freecad/ --- Базовая система 3D CAD с продвинутыми возможностями по имитации движения (Motion Simulation). Больше для обучения, чем для реальной работы: изучение и освоение работы с геометрией, кинематикой, вибрацией и механизмами. Последнее обновление - 2005 год.

gCAD3D http://www.cadcam.co.at/freiter/gCAD3D.htm --- 3D - CAD/CAM - система. Довольно мощная, есть впечатляющие скриншоты, упор на архитектуру. Обновляется регулярно, проект живёт и понемногу развивается.

GnuCAD http://directory.fsf.org/gnuCAD.html --- попытка создания полнофункциональной CAD-системы с открытыми исходниками для Линукс систем. Текущая версия - 0.00, планируются скриптовые возможности и так далее.

IDOL http://balder.prohosting.com/~projidol/ --- IDOL создавался для целей обобщённого дизайна с использованием библиотек OpenGL. Проект так же хотел создать хорошую трёхмерную 3-D CAD систему для Линукс. Последнее обновление - декабрь 2000. Очень ранняя стадия разработки.

LeoCAD http://leocad.gerf.org/ --- CAD-система, использующая для создания объёмных фигур подход Лего (игрушечный конструктор). Использует OpenGL, позволяет создавать крупные и сложные модели. Последнее обновление 2004 год.

oCADis http://www.nocrew.org/software/ocadis/ --- Плоская двухмерная система CAD для Линукс. Написан под GTK1, последнее обновление 2003 год. Реализованы основные инструменты рисования: линии, круги, дуги и прочие. Поддерживает HPGL (экспорт), DXF (импорт и экспорт), PostScript вывод. Обновлялся в 2003 году.

OCTREE http://www.octree.de/ --- законченная система черчения, моделирования и визуализации, фокусируется на проектировании архитектурных решений. Подаёт признаки жизни.

QCad http://www.qcad.org/ --- достаточно мощная CAD-система, пригодная для несложного 2D-черчения. Есть недоработки и глюки, но пока что является, пожалуй, лучшей открытой и бесплатной CAD-системой в Линукс. Присутствует в Debian. Использует в качестве стандартного формата DXF и имеется поддержка HPGL. Интерфейс очень простой и понятный, чем-то похожий на сильно упрощённый AutoCAD. Пригоден для использования полными чайниками :-)

SagCAD http://sagcad.sourceforge.jp/ --- простая двухмерная CAD/CAM система с импортом\экспортом dxf, реализовано рисование полилиний, эллипсов, линий, сплайнов и проч. Бета-версия, последнее обновление - ноябрь 2003.

Sailcut CAD http://sailcut.sourceforge.net/ --- CAD-система заточенная под проектирование яхт, создание и визуализация чертежей парусных судов. Разрабатывается с 1978 года, проект активен и развивается.

ThanCAD http://thancad.sourceforge.net/ --- 2-D CAD-система, заточенная под инженерное черчение и способная внедрять в документ растровую графику. Написана на Python и использует библиотеку wxPython, должна быть платформонезависимой. Последнее обновление - ноябрь 2004 года, признаков жизнедеятельности нет.

VARKON http://www.tech.oru.se/cad/varkon/ --- полностью открытая CAD-система общего назначения для интерактивного моделирования, но вообще это больше язык описания и программирования. Весьма нетривиальный программный продукт, хотя присутствует в Debian. По утверждениям авторов, полностью поддерживается параметрическое описание 2D и 3D-объектов.


Коммерческие CAD-системы в Linux
В последнее время [прим. 2010 год] всё больше и больше коммерческих CAD-систем делают версии для Linux и UNIX. Вот некоторые из них.

Bricscad V10 http://www.bricsys.com/en_INTL/ -- одна из альтернативных CAD-систем, совместимая с форматом DWG. BricsCAD считается достаточно стабильным и функциональным. BricsCAD будет будет поддерживать две разновидности Linux-дистрибутивов: Red Hat и Ubuntu (Debian-based). Все желающие могут скачать бета-версию BricsCAD (~50 Мб) для тестирования на официальном сайте компании Bricsys.


VariCAD http://www.varicad.com/ -- компактная 3D/2D-система автоматизированного проектирования для машиностроения. Помимо стандартных инструментов трехмерного моделирования и двумерного черчения, система предоставляет возможности создания разверток листовых деталей, поддержку сборок, библиотеки стандартных элементов (ANSI, DIN), а также инструменты для конструкторского расчета, создания спецификаций и заполнения основной надписи. VariCAD поддерживает форматы STEP, STL, IGES, DWG и DXF.

Читать далее

Как проверить CD и DVD диск после записи



33 коммент.
Задача: диск записан - нужно проверить правильность записанных данных.
Решение: для этого есть простые средства, типа dd и md5sum. Реализация в виде скриптов.
Для этого нам нужен md5sum и несколько утилит, входящих в любой уважающий себя дистрибутив. Есть несколько способов, приведу известные мне ниже (если кто предложит ещё - с удовольствием добавлю).

Подсчёт контрольной суммы файла
Для того, чтобы просто подсчитать MD5-сумму уже имеющегося iso-образа, пишем в консольке
md5sum my.iso
Через некоторое время вы увидите что-то вроде этого:

e941bb0ecac20a2043c9f8e69fbab63a my.iso
А можно и так:
cat my.iso | md5sum
Увидите то же самое:
e941bb0ecac20a2043c9f8e69fbab63a
Для скачиваемых из Интернета iso-образов обязательно рядом с ним лежит либо файл MD5SUMS, или такой же по имени файл, только с расширением md5 - не забывайте их скачивать. Так можно будет всегда проверить, правильно ли вы скачали образ диска.
Кстати говоря, кроме метода MD5 встречается SHA1 - его особенно любят федоровцы. Синтаксис тот же, что и у md5sum, только утилита называется соответственно sha1sum.


Проверка правильности записи на CD и DVD диск
Есть несколько способов сделать это, и большинство из них основано на подсчёте контрольной md5-суммы исходного образа и записанного на диск. Их совпадение гарантирует правильность записи и то, что файлы на диске не повреждены.

Способ #1: утилита dd

Эта утилита входит в состав любого дистрибутива и является чрезвычайно полезной во многих случаях - здесь мы тоже будем её использовать. Однако в случае с CD и DVD дисками есть свои тонкие моменты, которые необходимо учитывать, иначе вы получите неправильные результаты.

Для CD-дисков

Вставляем пропаленный диск, и, не монтируя его, пишем в консольке:

dd if=/dev/cdrom | md5sum

Если у вас другое устройство для чтения/записи дисков (не /dev/cdrom) - измените команду соответственно. После выполнения этой команды вы увидите:

$ dd if=/dev/cdrom bs=2048 | md5sum 355562+0 входных записей
355562+0 выходных записей
728190976 bytes transferred in 299,413377 seconds (2432059 bytes/sec)
e941bb0ecac20a2043c9f8e69fbab63a -


Если у вас есть файл MD5SUMS или my.iso.md5 - проверьте, совпадают ли контрольные суммы. Если у вас такого файла нет, но есть образ диска - просто подсчитайте его контрольную сумму, как говорилось выше: md5sum my.iso

Для DVD-дисков
Здесь всё немного сложнее: дело в том, что при записи на DVD пишется так же и служебная информация, поэтому для проверки DVD-дисков утилитой dd нужно точно указывать размер и количество блоков. Для того, чтобы узнать, сколько значимых блоков (extents) имеется в iso-образе, выполняем команду (вводите именно так, как написано, меняя тольк имя образа):

echo $(( $(ls -l my.iso | awk '{ print $5 }') / 2048 ))
Результатом будет число блоков - это число нам потребуется для команды dd:
169383

Теперь, зная, что размер блока равен 2048 байт и количество блоков на DVD-диске, даём команду:
dd if=/dev/cdrom bs=2048 count=169383 | md5sum


Результатом её выполнения будет вывод:
$ dd if=/dev/cdrom bs=2048 count=169383 | md5sum 169383+0 records in
169383+0 records out e941bb0ecac20a2043c9f8e69fbab63a -

Как видно, что записанный на DVD образ и isoшник на жёстком диске совпадают, так что запись прошла успешно.

Подчёркиваю:

для DVD-дисков обязательно нужно указать размер и количество считываемых блоков, иначе утилита dd может считать служебные данные, что исказит значение контрольной суммы и вы будете думать, что запороли болванку в то время как (возможно) данные записаны верно. Более подробно об этом методе говорится, например, здесь.

Пример неправильного подсчёта контрольной суммы: Взяли iso-образ, пропалили его:
growisofs -Z /dev/cdrom=my.iso
Утилита напишет:
builtin_dd: 169392*2KB out @ average 4.4x1385KBps
А теперь считаем данные
dd if=/dev/cdrom | md5sum
169392+0 records in
169392+0 records out
1188f67d48c9f11afb8572977ef74c5e -

Сверяем:
md5sum my.iso:
e941bb0ecac20a2043c9f8e69fbab63a my.iso

Не сходится! А всё почему? Потому, что
утилита dd считали все блоки (169392), как вы её и просили. Но это неправильно: значащих блоков там меньше (169383), поэтому контрольная сумма совсем другая. Всегда указывайте количество и размер блоков при проверке DVD-дисков!


Способ #2: утилита diff
Другой способ, не требующий наличия программы md5sum, был предложен здесь же, в комментариях. Заключается он в остроумном использовании команды diff, которая выдаёт информацию обо всех файлах, в которых совпадает содержимое. Для этого нужно смонтировать только что записанный диск:
mount -t iso9660 /dev/cdrom /mnt/cdrom
и (в другую точку монтирования, на петлевое устройство) имеющийся iso-образ.
sudo mount -t iso9660 my.iso /mnt/flash/ -o loop
Затем напишите
diff -urN /mnt/cdrom /mnt/flash
Если утилита ничего не напишет - значит, все файлы совпадают и запись диска проведена правильно. Это работает и для CD, и для DVD-дисков.


Способ #3: утилита readcd (только для CD-дисков) Эта утилита входит в комплект cdrtools и производит посекторное чтение данных с диска. Очень удобно как для проверки, так и для сдирания образа с какого-нибудь принесённого диска. По этому поводу мной написан простенький скрипт на баше:

#! /bin/sh
if [ -z $1 ]; then
echo "Скорость считывания?"
read kmvISOspeed;
else
kmvISOspeed=$1;
fi
readcd dev=ATAPI:0,0,0 speed=$kmvISOspeed f=temp.raw;
md5sum temp.raw
Некоторые пояснения к скрипту. Для того, чтобы выяснить адрес для ATAPI, запускаем
sudo cdrecord -scanbus dev=ATAPI
Выдаст он нам что-то вроде:

Cdrecord-Clone 2.01.01a01 (i686-pc-linux-gnu) Copyright (C) 1995-2004 Joerg Schilling NOTE: this version of cdrecord is an inofficial (modified) release of cdrecord and thus may have bugs that are not present in the original version. Please send bug reports and support requests to . The original author should not be bothered with problems of this version. cdrecord: Warning: Running on Linux-2.6.15.7 cdrecord: There are unsettled issues with Linux-2.5 and newer. cdrecord: If you have unexpected problems, please try Linux-2.4 or Solaris. scsidev: 'ATAPI' devname: 'ATAPI' scsibus: -2 target: -2 lun: -2 Warning: Using ATA Packet interface. Warning: The related Linux kernel interface code seems to be unmaintained. Warning: There is absolutely NO DMA, operations thus are slow. Using libscg version 'ubuntu-0.8ubuntu1'. cdrecord: Warning: using inofficial version of libscg (ubuntu-0.8ubuntu1 '@(#)scsitransp.c 1.91 04/06/17 Copyright 1988,1995,2000-2004 J. Schilling').
scsibus0:

0,0,0 0) '_NEC ' 'DVD_RW ND-3550A ' '1.05' Removable CD-ROM

0,1,0 1) *

0,2,0 2) *

0,3,0 3) *

0,4,0 4) *

0,5,0 5) *

0,6,0 6) *

0,7,0 7) *
Выделенные полужирным цифры и подставляем в качестве цели для записи - это наш привод.

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

SquashFS против архиваторов в Linux: плюсы и минусы



13 коммент.
Задача: сравнить степень и скорость сжатия файловой системы SquashFS и распространённых архиваторов под Linux, а так же ещё раз упомянуть, где и когда можно (и нужно) использовать сжатые файловые системы.

Преамбула
Здесь я писал о том, что такое SquashFS и зачем оно надо. Иногда удобно использовать такие файловые системы вместо архиваторов, и не столько из-за степени сжатия (которая у архиваторов выше), а за большую скорость доступа и возможность работы с данными без разархивации. Например, вы скачали какой-нибудь сайт целиком wget-ом. Это куча html-ек и графических файлов, но они занимают много места, менять вы их не собираетесь, а хотите только просматривать время от времени. Легко и просто: сжимаем каталог с сайтом:
mksquashfs www.vasya.ru www.vasya.ru.sq
Расширение можно указать любое, которое понравится. Потом, когда захотите посмотреть на этот сайт и побродить по нему, просто прикручиваете на петлевое устройство файл - и вперёд. Распаковка "на лету" происходит незаметно - для современных процессоров это семечки. Посмотрели, открутили - и забыли. Удобно, просто и легко.
Вариант: есть много ISOшников, которые не так часто используются. Сжимаем их тоже в SquashFS, а когда надо, например, погонять их в эмуляторе, просто прикручиваем на петлю и указываем эмулятору на iso-файл, который виден в точке монтирования. И никакой утомительной разархивации.

Тестирование SquashFS в Linux
Проводилось тестирование на скорость и степень сжатия по шести видам файлов (которые у меня чаще всего попадаются). Красным выделялся архиватор с наибольшей степенью сжатия. Участие в тестировании приняли архиваторы, наличествующие в Debian GNU/Linux (и кое-какие, в нём по религиозным лицензионным соображениям отсутствующие, но установленные), как то: bzip2, p7zip (многопоточный), gzip, arj, rar (проприетарный, полнофункциональная trial-версия, после тестирования удалён), mksquashfs v3.0, mksquashfs v3.1 (многопоточный).
Тестирование проводилось на машине следующей конфигурации: P4 630 (3GHz, 2Mb cache, HyperThreading), Intel i915 PGNL Motherboard, 2Gb DDRAM, HDD 36Gb WD Raptor + 250Gb WD 250JB, ATi X200 VideoCard. OS Debian GNU/Linux v3.1 "Sarge" с оптимизированным ядром Linux версии 2.6.15.7 \#1 SMP PREEMPT i686. На момент тестирования время непрерывной работы машины составляло 95 дней.
При архивировании утилитам передавались параметры:
  • mksquashfs
  • rar a -m5
  • bzip2 --best -z
  • p7zip
  • gzip --best
  • arj a -m4
Запуск проводился скриптом на bash, в консоли, графический сервер был выключен. Никаких ресурсоёмких процессов на фоне запущено не было.

1. Много больших несжатых полутоновых видеофайлов
Тест несколько искусственный, так как эти "фильмы" сделаны из простых полутоновых BMP-файлов. В свободном виде они занимают просто чудовищный объём, а нужны для оптических экспериментов (эксперимент MotionScreen, кому надо, тот знает). В чистом виде занимают 1.5Гб, а вот что с ними стало после архивирования:


Архиватор Время Компрессия



squashfs 3.0 61 175,07



squashfs 3.1 83 175,07



rar 114 508,66



bzip2 140 2900,95



p7zip 307 5017,85



gzip 101 191,5



arj 31 53,24




Архиватор p7zip показал самую высокую степень сжатия, однако, несмотря на то, что он работал в многопоточном режиме (ядро с активированной поддержкой HyperThreading), сжимал дольше всех. Хвалёный и тем более несвободный rar порядком проигрывает свободному bzip2 при сравнимой скорости сжатия. Сжатие squashfs несколько в стороне, хотя и довольно быстрое. Занятно, что многопоточное исполнение для утилиты сжатия squashfs даже снизило её быстродействие (тест запускался трижды, значения те же).

2. Цветные RAW-файлы
Фотографии в формате "прямо с камеры" объёмом в 90 Мб были сжаты теми же архиваторами - посмотрим, что из этого вышло:


Архиватор
Время
Компрессия



squashfs 3.0
14
1,06



squashfs 3.1
13
1,06



rar
61
1,1



bzip2
37
1,14



p7zip
72
1,12



gzip
12
1,06



arj
1
1



Здесь с незначительным перевесом по степени сжатия, но почти вдвое по скорости обскакав конкурентов, лидирует bzip2. В этой программе squashfs выглядит уже не так бледно, находясь так же на уровне gzip.

3. Офисные документы
Здесь я вытащил find-ом всё, что имело расширение doc, odt, xls и ods. Получилось немного, на 30Мб, но тем не менее:

Архиватор
Время Компрессия








squashfs 3.0
4 1,07








squashfs 3.1
4 1,07








rar
20 1,07








bzip2
15 1,07








p7zip
19 1,13








gzip
4 1,07








arj
0 1,05





















Здесь свободный p7zip снова делает проприетарный rar, причём не только по степени сжатия, но и по скорости (а вот тут, быть может, HyperThreading и сыграл, а rar его не держит - проприетарщина, а ещё денег просит). SquashFS очень шустрый, и компрессия неплохая, очень похожая по результатам на gzip (в этом тесте размер архива gzip и sq просто совпали байт-в-байт, что наводит на мысль о том, что в squashFS сжатие если не zip, то во всяком случае очень похожее).

4. Полутоновые графические файлы TIF
Много экспериментальных результатов приходится хранить в tif-файлах, так что интерес к тому, кто круче их жмёт (не обязательно быстро) неслучаен. Сжато файлов на 82Мб, вот результаты:


Архиватор
Время
Компрессия





squashfs 3.0
20
1,81





squashfs 3.1
18
1,81





rar
48
1,97





bzip2
25
2,4





p7zip
132
2,23





gzip
19
1,86





arj
6
1,51





Первое место вновь за свободной программой: bzip2 очень лихо жмёт tif-файлы, а кроме того очень быстро. Чуть меньше степень сжатия у p7zip. SquashFS при той же компрессии в многопоточном режиме жмёт немного быстрее, но тоже на уровне gzip - как по скорости, так и по сжатию (здесь разница между ними была ровно 200 байт).

5. Скачанный сайт
Мой любимый тест - сайтов я качаю много, так что очень и очень актуально. Здесь пожат портал www.teatips.ru, где находится всё, что можно и нужно узнать о чае. Всего 460Мб, немного терпения и результат:


Архиватор
Время
Компрессия




squashfs 3.0
38
3,49




squashfs 3.1
30
3,49




rar
167
3,03




bzip2
257
4,41




p7zip
188
4,59




gzip
22
4,26




arj
19
2,68





Картина маслом: rar сливает squashfs по всем статьям! Очень радостно видеть первые три места за свободными программами. Впрочем, результат по времени p7zip можно оспорить: здесь скорее всего заиграл снова гипертреадинг, что видно и по squashFS (та же степень сжатия, но быстрее на 21%, что неплохо коррелирует с заверениями Интел про прибавку до 30% производительности на некоторых задачах). Это подтверждается и визуально: многопоточные архиваторы на глаз быстрее при включённом гипертреадинге при пожатии множества мелких файлов.

6. ISO-образ
Пожат первый iso-образ диска с Дебианом Сарж, 650Мб:


Архиватор
Время
Компрессия



squashfs 3.0
74
1,03



squashfs 3.1
75
1,03



rar
718
1,05



bzip2
297
1,03



p7zip
411
1,05



gzip
65
1,03



arj
16
1



Rar таки обошёл p7zip, но на сколько? Не поверите, но аж на 0,0039% - я уверен, что это стоит тех денег, которые Рошаль с вас потребует за консольную версию своего чудотворного архиватора.
В общем, сжимать iso-шники здорово простым gzip, быстро и примерно так же по компрессии, как и все другие. А ещё лучше isoшники пожимать в squashFS, ибо их можно пропаливать на болванки и гонять в эмуляторах, даже не распаковывая.

Итоги
Ну вот, пока тесты закончились и заметка написана, и в комнате теплее стало. :-)
Здесь хотелось бы отметить важный момент: открытые архиваторы почти всегда уделывают проприетарные, либо по скорости, либо по компрессии. Так что для того, чтобы эффективно сжимать свои данные, вовсе не обязательно платить за это деньги, так как p7zip и bzip2 есть под распространённые платформы и распространяются под GPL-совместимыми лицензиями.
SquashFS по компрессии и скорости близка к gzip, что вовсе не так плохо: в ряде случаев её применение более чем оправдано, особенно если вы часто имеете дело со скачанными сайтами или большим количеством редко изменяемых офисных документов.
Читать далее

Запись CD и DVD дисков в Linux: Как записать CD/DVD диск под Linux



28 коммент.
Задача: нужно записывать CD и DVD диски с данными в Linux без графических утилит. Чем прожигать диски в Linux?

Решение: все программы записи дисков под Linux есть просто графические оболочки к базовым утилитам cdrecord/wodim и growisofs. В некоторых случаях эти оболочки вносят свои дополнительные проблемы в процесс записи дисков, так что я их никогда не использовал. Чтобы не забыть самому и если кому интересно - ниже описание процесса.
В этом посте приводятся только основные команды и параметры утилит, которыми я пользуюсь постоянно - пост ни в коем случае не отменяет чтение man mkisofs cdrecord growisofs и других.

Как узнать адрес привода
Запись на привод проводится через ATAPI, а не эмуляцию SCSI, как когда-то делали. Для этого пишем в консольке:
sudo cdrecord -scanbus dev=ATAPI
Выдаст он нам что-то вроде:

Cdrecord-Clone 2.01.01a01 (i686-pc-linux-gnu) Copyright (C) 1995-2004 Joerg Schilling
'@(#)scsitransp.c 1.91 04/06/17 Copyright 1988,1995,2000-2004 J. Schilling').

scsibus0:
0,0,0 0) '_NEC ' 'DVD_RW ND-3550A ' '1.05' Removable CD-ROM

0,1,0 1) *

0,2,0 2) *

0,3,0 3) *

0,4,0 4) *

0,5,0 5) *

0,6,0 6) *

0,7,0 7) *

Выделенная полужирным строка - это и есть наш привод, а цифры 0,0,0 - его адрес, который и подставляем в качестве цели для записи диска через ATAPI. Но об этом ниже.

Запись CD-R/RW дисков
Для этого нужно установить либо сторонние пакеты cdrtools, либо пакты из Etch, которые называются cdrkit (свободная версия cdrtools). Тогда в вашем распоряжении окажутся утилиты cdrecord для записи/очистки дисков, mkisofs для создания ISO-образов из файлов, cdda2wav для сдирания с образа аудиотреков. Всё это нам понадобится для создания и пропаливания дисков.

Создание ISO-образа
Если нужно создать сперва ISO-образ для пропаливания, пользуемся утилитой mkisofs. Тут есть некоторые тонкости, например, под Windows XP и другими версиями Windows не воспринимаются права файлов, что принято в *nix-системах. Так же, если требуется пропалить диск для юниксоида с правами доступа, то нужно использовать опцию -r, которая включает расширение RockRidge стандартной iso9660. Если нужны длинные имена файлов и русские их названия, то включаем расширение Joliet. Короче говоря, чтобы из каталога /home/vasya/stuff сделать iso-образ под названием disk.iso, пишем в консольке следующее:
mkisofs -joliet-long -r -o disk.iso /home/vasya/stuff
После этого в каталоге, из которого вызывалась программа, появится disk.iso, который теперь можно пропаливать на болванку.

Запись CD-R дисков
Если уже есть ISO-образ и его надо просто пропалить, то надо вызвать cdrecord и указать ему скорость пропаливания, адрес устройства и непосредственно сам образ. Делается это так:
cdrecord -v speed=40 dev=ATAPI:0,0,0 my.iso
То есть записать с подробным выводом сообщений на скорости 40 на устройство ATAPI:0,0,0, (Primary Master 1-ого IDE-канала) образ my.iso - всё логично и понятно. Пока пропаливается диск - сворачиваем окошко консоли и занимаемся другими делами.

Можно поступить и так: чтобы не задавать руками скорость и завернуть команду в полностью автоматический скрипт, укажите speed=0, тогда программа сама выберет подходящую скорость, на которой болванка будет гарантированно читаться и привод её не запортит. Чтобы вообще не вспоминать потом про параметры, можно их прописать в /etc/cdrecord/cdrecord, в котором можно "определить" устройство, на которое будет производиться запись - то есть, прописать его ATAPI адрес, размер буфера FIFO, назначить имя этому устройству, и в дальнейшем обращаться к этому устройству по имени, при записи.

Всё это очень легко заворачивается в башевские/перловые (по вкусу) скрипты и выполняется через некоторое время на полном автомате, что однозначно быстрее всяких приблуд типа k3b с их GUIёвым интерфейсом.

Запись CD-RW дисков в Linux
Здесь немного поинтереснее, так как если на диске что-то есть, то вариантов становится больше: дописать информацию или снести оттуда всё и записать снова. Для того, чтобы очистить болванку, есть несколько методов, реализованных в cdrecord: быстрая очистка, только указанная сессия, полная очистка и другие. Например, для быстрой очистки пишем:
cdrecord -v blank=fast dev=ATAPI:0,0,0
и через пару секунд на него уже можно писать новые данные.
Запись CD-RW дисков ничем не отличается от записи обычных однократных болванок, и команда:
cdrecord -v speed=40 dev=ATAPI:0,0,0 my.iso
пропаливает диск точно так же. Только следите за указанием скорости пропаливания - для перезаписываемых болванок она ниже, чем для однократных.

Кстати, о скоростях. Утилита cdrecord поступает очень грамотно, на мой взгляд, что начинает запись с маленькой скорости, и постепенно подбирается к указанной максимальной, если это возможно. А не как некоторые безмозглые проприетарные громилы, которые сразу пытаются писать на большой скорости, а если не удаётся - скидывают скорость вдвое и на ней пишут весь диск. Скорость записи болванки может варьироваться в зависимости от производителя и нагруженности системы в данный момент. Для CD болванок 1х = 150 Кб/сек, при записи Audio-CD 1х = 172 Кб/сек, для DVD 1х = 1385 Кб/сек.

Запись DVD-R/RW дисков
Для этого нужно поставить утилиты dvd+rw-tools, которые входят в дистрибутив и включают в себя программы для записи и форматирования DVD-дисков. После этого, помимо других утилит, в нашем распоряжении будет growisofs для создания и записи образов на DVD, а так же dvd+rw-format для предварительного форматирования перезаписываемых DVD+RW. Запись DVD немного отличается от записи простых CD-болванок, так что ниже приведу команды для этого.

Запись DVD-/+R дисков в Linux

Для этого нам потребуется утилита growisofs, которая входит к комплект dvd+rw-tools, и объединяющая в себе mkisofs и cdrecord в одном флаконе. Для того, чтобы пропалить на DVD-болванку (без разницы - это DVD+R или DVD-R) файлы из каталога /home/vasya/something, пишем в консольке:
growisofs -Z /dev/cdrom -R -J /home/vasya/something
где после -Z идёт устройство, которое является резаком. Даже если оно называет /dev/cdrom, не надо удивляться: утилите всё равно. Скорость утилита подберёт сама, ту, на которой болванка гарантированно пропалится без ошибок, так что форсировать процесс не стоит.

Если уж так хочется прожечь болванку побыстрее, можно рекомендовать growispfs скорость ключом -speed=N так:
growisofs -speed=8 -Z /dev/cdrom -R -J /home/vasya/something
Помним, что для DVD скорость 1х = 1385 Кб/сек.
Если нужно пропалить уже готовый ISO-образ, команда изменится так:
growisofs -Z /dev/cdrom=image.iso
В процессе записи будет постоянно выводиться информация о текущей скорости записи, прогрессе и оставшемся до конца пропаливания времени.


Запись DVD-/+RW дисков
Для начала болванку нужно отформатировать, это делается так:
dvd+rw-format -f /dev/cdrom
Если у вас другое устройство для записи, отличное от /dev/cdrom, замените его на своё. После этого запись на диск идёт так же, как и для обычных DVD-болванок:
growisofs -Z /dev/cdrom=image.iso
После этого начнётся запись, а мы можем заняться чем-то более полезным, чем созерцание процентов записываемого образа.

Возможность использования DVD-/+RW как дискеты
Есть возможность использования пакетной записи и файловой системы udf (должна быть скомпилирована поддержка ядре), чтобы работать с перезаписываемым DVD-диском как с большой дискетой. Как мне любезно написал в комментариях ув.тов. Anonymous, выглядит это так:
dvd+rw-format -f /dev/cdrom
mkudffs /dev/cdrom

После чего работаем как с простым RW сменным носителем типа дискетки или флешки:
mount -t udf /dev/cdrom /mnt/cdrom
cp /etc/* /mnt/cdrom/
rm /mnt/cdrom/shadow
eject
Просто и удобно.

Как проверить правильность записи на диск - проверка дисков в Linux
Для того, чтобы убедиться в правильности записи данных на диск, есть замечательная утилита dd, которая входит в любой дистрибутив Linux. О том, как проверить диск после записи, есть подробные инструкции на этом же блоге.


Ссылки
Помимо мануалов к утилитам, которые написаны очень толково, можно почитать о записи на разных ресурсах, перечисленных ниже.
CD:
Замечательная статья по записи через ATAPI здесь. На английском хорошая есть статья, в которой почти обо всём и толково. Теоретический, но уже немного устаревший, обзор тут, а здесь совсем зубодробильный обзор возможностей CD-приводов.
DVD:
Очень хорошая и информативная статья по записи болванок DVD здесь. На английском, но довольно просто и толково про это же есть тут. Много интересного можно почерпнуть отсюда.
Читать далее