Показаны сообщения с ярлыком системное. Показать все сообщения
Показаны сообщения с ярлыком системное. Показать все сообщения

Репозиторий deb-пакетов своими руками: сборка пакетов в Debian из исходников и бинарников на скорую руку



17 коммент.
Часто бывает нужно по-быстрому собрать deb-пакет в Debian, особенно когда уже имеется бинарный файл. Так как мы не слакварщики и не хотим засорять систему make & make install, мы пойдём другим путём и сделаем собственный пакет. А чтобы они не валялись по всему диску, закатаем наши пакеты в собственный же репозиторий.

Распаковка существующих пакетов

Сначала посмотрим, что внутри пакета deb или rpm.

Распаковка deb-пакета

Распаковать пакет Debian нужно в два этапа - сначала извлекаем из него файлы, а потом добираемся до собственно бинарников. Вскрываем пакетик:
# ar vx mypackage.deb
Файл пакета mypackage.deb содержит три вложенных файла:
  • debian-binary - это текстовый файл, который содержит информацию о версии пакета (например: 2.0)
  • control.tar.gz - этот архив содержит всю мета-информацию: имя и версию пакета, зависимости и прочее.
  • data.tar.gz - собственно, бинарники программы, необходимые для работы. Именно эти файлы будут разархивированы в каталог /usr для дальнейшего использования.
Теперь, если нам охота поживиться бинарниками пакета (содержимое data.tar.gz), даём команду:
$ tar -xzvf data.tar.gz
В текущем каталоге появится ./usr текущего каталога. Желанный бинарник лежит в ./usr/bin подкаталоге.

Если же вам нужно просто извлечь файлы из пакета, можно всё сделать одной командой
$ ar p mypackage.deb data.tar.gz | tar zx
это распакует пакет deb в текущий каталог. Другой вариант - использовать dpkg-deb в виде:
$ dpkg-deb -x что.deb куда/


Распаковка rpm-пакета

На всякий случай о том, как распаковать пакеты вероятного противника RPM-based систем. Для этого нам потребуются программы rpm2cpio и cpio. Распаковка содержимого RPM пакета делается в один шаг:
$ rpm2cpio mypackage.rpm | cpio -vid
Если же нужно просмотреть содержимое пакета, не распаковывая его, даём команду:
$ rpm2cpio mypackage.rpm | cpio -vt
Для того, чтобы (попытаться) конвертировать RPM-пакет в Debian, можно воспользоваться командой:
# alien mypack.i386.rpm
Надо сказать, что пакеты RPM и DEB сильно отличаются друг и друга, и такое простое конвертирование не всегда проходит.

Deb-пакет из бинарного файла

Теперь, когда мы знаем, что ничего волшебного внутри deb-пакетов нет, можно попробовать сварганить свой собственный дебиановский пакетик.
Часто хочется сделать побыстрее, чтоб "завелось и поехало" - и вместо пакетов пользователи устанавливают программы в виде ./configure, make & make install (вместо make install можно использовать checkinstall). Как уже говорилось не раз, не стоит поддаваться искушению и ставить программы в Linux в обход менеджера пакетов - пакетный менеджер ничего о них знать не будет, и при обновлении системы вы рискуете получить больше проблем на свою голову, чем представляете.
Иногда бывает так, что исходников к пакету нет - скажем, поступила к нам проприетарщина, а упаковать её в пакет хочется. Или мы наваяли скрипт, и хочется, чтобы он был на многих машинах. Нет проблем: завернём это в deb-пакет и скормим apt-у.
Для этого нам понадобится утилита
# apt-get install dpkg-dev
Подопытным кроликом будет служить бинарный файл системы контроля версий fossil, о котором уже говорилось ранее.
Идея в том, чтобы в локальном каталоге (назовём его ~./tempprog) отдублировать структуру каталогов для программы так, как она лежала бы в системе в установленном виде. Большинство бинарников находится в системном каталоге /usr/bin, поэтому создаём такую же структуру в локальном:
$ mkdir -p ./tempprog/usr/bin/
Так мы создадим все подкаталоги за один проход. Зайдём внутрь:
$ cd tempprog/
и увидим созданные подкаталоги:
$ tree
Вот они:

.
└── usr
     └── bin
2 directories, 0 files

Отлично, теперь в локальном каталоге ./tempprog создаём подкаталог ./DEBIAN:
$ mkdir ./DEBIAN

Внутри подкаталога ./DEBIAN создаём текстовый файл control с таким содержимым:
Package: имя-пакета
Version: версия пакета, скажем 1.0 или 2.7.9.
Architecture: архитектура(i386, amd64, all...)
Maintainer: сопровождающий_пакета
Installed-Size: размер программы в килобайтах
Depends: зависимости (пакет (>= версия))
Recommends: рекомендации (пакет (>= версия))
Suggests: предложения (пакет)
Section: секция (multimedia, games, system, или другое)
Priority: приоритет (optional)
Homepage: http://www.домашняя_страница
Description: описание программы 

Таким образом, в нашем локальном каталоге ./tempprog будет лежать вот что:

.
├── DEBIAN
│.. └── control
└── usr
    └── bin
        └── fossil
3 directories, 2 files

Теперь из каталога ./tempprog даём команду на сборку этого простенького пакета:
$ dpkg-deb -b ./ ./
В результате появится пакет (в нашем примере с fossil) вида:
fossil_1.21_i386.deb
который можно сразу же установить в систему:

$ sudo dpkg -i fossil_1.21_i386.deb
[sudo] password for starscream:
Selecting previously deselected package fossil.
(Reading database ... 247627 files and directories currently installed.)
Unpacking fossil (from fossil_1.21_i386.deb) ...
Setting up fossil (1.21) ...

И всё, наступает счастье.

Небольшое примечание: если кто хочет установить программу в директорию
/opt/ нужно сделать следующее:

- В локальном каталоге ./tempprog создаём каталог /opt/ и размещаем там
программу так, как она и будет установлена в /opt
- Там же, в ./tempprog создаём подкаталоги /tempprog/usr/bin/
в котором размещаем небольшой скрипт, например zotero
- В нём пишем:

#! /bin/sh
PATH=$PATH:/opt/zotero/
/opt/zotero/zotero

Это говорит системе, что теперь можно запускать файлы и из /opt/zotero


Deb-пакет из исходников на скорую руку

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

Если нам повезло и все зависимости уже в системе, можно скомпилировать исходные тексты программы и по-быстрому завернуть всё в пакет Debian.

Для этого скачанные исходные тексты программы (для примера foobar версии 1.2.3) распаковываем в каталог foobar-1.2.3, и от рута даём команду:
# dh_make --createorig
Далее пишем
# debuild
Опять, если нам повезло, всё должно собраться без вопросов. Полученный пакет устанавливаем
# dpkg -i foobar_1.2.3-1_i386.deb
Охочим до тонкостей дебиановской кулинарии и прочим правильно писающим мальчикам просьба пройти сюда и насладиться The Debian Administrator's Handbook. Эта Книга о вкусной и здоровой пище довольно занудная, водянистая и словоохотливая книжеца от двух дебианщиков расскажет вам о Debian Policy, как всё делать ортодоксально и, когда авторы вспоминают, что не мемуары пишут, про то, что же таки собственно делать.

Создание собственного локального репозитория Debian своими руками

Когда количество собственноручно собранных пакетов перевалит за десяток, захочется удобства и комфорта установки софта. К счастью, создание собственного локального репозитория - дело сравнительно простое.

Создаём каталог, в котором будут лежать все собранные непосильным трудом пакеты - пусть это будет ~/zips/virensdebianrepositor в который копируем deb-пакеты.

Для создания репозитория нам понадобится dpkg-scanpackages который является (во всяком случае на момент написания поста) частью пакета dpkg-dev, как это неожиданно выяснилось.

Создаём список пакетов:
$ dpkg-scanpackages . /dev/null | gzip -9c > ./Packages.gz
Может быть, нам будет выведено сообщение типа:

dpkg-scanpackages: warning: Packages in archive but missing from override file:
dpkg-scanpackages: warning:   fossil linux-headers-3.8.0-avl9-pae linux-image-3.8.0-avl9-pae pdfsam sublimetext virtualbox-4.2 xserver-xorg-input-wacom zotero
dpkg-scanpackages: info: Wrote 8 entries to output Packages file.

Теперь в нашем репозитории 8 пакетов. Отлично, добавляем наш репозиторий в файл:
# vim /etc/apt/sources.list
строчкой типа:

deb file:///home/имя_пользователя/zips/virensdebianrepository ./

Теперь нужно обновить список пакетов, чтобы они стали доступны для установки:
# apt-get update
Всё, теперь можно установить, к примеру, свежесобранный текстовый редактор Sublime Text 2 (отличная инструкция там) как всегда: Теперь, для того, чтобы установить SublimeText достаточно сделать:

# apt-get install sublimetext

Reading package lists... Done
 Building dependency tree
 Reading state information... Done
 The following NEW packages will be installed:
   sublimetext
 0 upgraded, 1 newly installed, 0 to remove and 245 not upgraded.
 Need to get 0 B/11.4 MB of archives.
 After this operation, 17.4 MB of additional disk space will be used.
 WARNING: The following packages cannot be authenticated!
   sublimetext
 Install these packages without verification [y/N]? Y
 Selecting previously deselected package sublimetext.
 (Reading database ... 247813 files and directories currently installed.)
 Unpacking sublimetext (from ..././sublimetext_2.0.2_i386.deb) ...
 Setting up sublimetext (2.0.2) ... 
Всё, пакет будет распакован и установлен, а то, что он из местного репозитория, видно вот тут: (from ..././sublimetext_2.0.2_i386.deb)

Заключение

Описанные в этом посте рецепты - блюда на скорую руку, а не фуагра с трюфелями. Для больших репозиториев или сложных пакетов придётся-таки ознакомиться с документацией и руководствами. Ещё можно воспользоваться программой APTonCD, которая умеет не только создавать репозитории, но и записывать их на CD/DVD диски.
Читать далее

Вглубь синтетических джунглей файловой системы sysfs в Linux



8 коммент.
Файловая система /sys в Linux отличается от /proc тем, что предоставляет детализированную информацию о работе ядра пользователю (например, параметры устройств и загруженных модулей). Информация строго организована и обычно форматируются простом ASCII тексте, что делает её очень доступной для пользователей и приложений. Так что можно занять шаловливые ручонки чем-нибудь полезным, вроде дёргания разных крутилок в /sys и подсматриванием в системные переменные. Далее - немного подробностей о синтетических джунглях файловой системы /sys.


Зачем нужна /sys, когда есть /proc? 

Основной лейтмотив создания /sys было навести некоторый порядок в том бардаке, который являет из себя /proc и выделить информацию о структурах ядра в отдельную директорию.

Sysfs это
файловая система, находящаяся в памяти (in-memory), основана первоначально на Ramfs, которая в свою очередь была написана во время перехода на ядро 2.4.0. Как говорит один из авторов [1], ``это было упражнение в элегантности, имевшее целью показать, насколько легко написать простую файловую систему, если использовать новый на тот момент слой VFS''. Из-за простоты и использования VFS, это дало здоровую основу для создания других in-memory файловых систем.

При этом sysfs может быть смонтирована, как и любая другая файловая система из пространства пользователя. Большинство дистрибутивов делают это автоматически при старте системы, добавляя соотвутствующую строчку в /etc/fstab.


Что внутри /sys?
Sysfs является каналом распространения информации между ядром и пространством пользователя. Например, есть возможность смены планировщика ввода/вывода или изменения параметров Udev программы. В каталоге /sys находится несколько подкаталогов, представляющих ряд основных подсистем, которые зарегистрированы в Sysfs:
/sys/
|-- block
|-- bus
|-- class
|-- devices
|-- firmware
|-- module
‘-- power


Внутри
/sys/block
Каталог /sys/block содержит подкаталоги для каждого блочного устройства, которое было обнаружено в системе. Там хранятся параметры, которые описывают такие свойства блочных устройств, как размер устройства, его партиции, планировщик ввода-вывода и другие.

Зайдя туда, мы обнаруживаем кучу блочных устройств, среди которых можно найти рабочий винчестер, подключённые флешки и внешние жёсткие диски. Вот что автор этих строк нашёл про свой жёсткий диск, на котором установлен евонный Дебиан:

notebeast:/sys/block/hda# ls -l
итого 0
-r--r--r-- 1 root root 4096 2012-03-03 22:05 capability
-r--r--r-- 1 root root 4096 2012-03-03 22:05 dev
lrwxrwxrwx 1 root root 0 2012-03-03 22:05 device -> ../../devices/pci0000:00/0000:00:1f.1/ide0/0.0
drwxr-xr-x 3 root root 0 2012-03-03 22:05 hda1
drwxr-xr-x 3 root root 0 2012-03-03 22:05 hda2
drwxr-xr-x 2 root root 0 2012-03-03 18:40 holders
drwxr-xr-x 3 root root 0 2012-03-03 22:05 queue
-r--r--r-- 1 root root 4096 2012-03-03 22:05 range
-r--r--r-- 1 root root 4096 2012-03-03 22:05 removable
-r--r--r-- 1 root root 4096 2012-03-03 22:05 size
drwxr-xr-x 2 root root 0 2012-03-03 18:40 slaves
-r--r--r-- 1 root root 4096 2012-03-03 22:05 stat
lrwxrwxrwx 1 root root 0 2012-03-03 22:05 subsystem -> ../../block
--w------- 1 root root 4096 2012-03-03 22:05 uevent
Отсюда мы узнаём, например, что диск /dev/hda разбит на две партиции, hda1 и hda2, размеры которых хранятся в size, что можно достучаться до планировщика I/O в queue   и собрать немножко статистики по работе жёсткого диска в stat. Заглянем туда в поисках приключений и чего-нибудь неизведанного.


Статистика ввода-вывода

Интерфейс /sys/block/sdX/stat даёт некоторые статистические данные о производительности ввода-вывода ядра. Эти данные пользователь или администратор может использовать для оптимизации производительности, если знает, что они значат.

Например, если дать команду:

# cat /sys/block/sda/stat
Мы увидим что-то типа:

186908 41568 6033917 2408504 91198 509600 4882200 9406764 0 1161304 11848624

Эти сакрально-литургические знаки означают следующее:

Поле 1 -- полное число запросов на чтение, выполненных успешно.


Поле 2 -- число объединённых запросов на чтение. Запросы на чтение и запись, примыкающие друг к другу, могут быть объединены для повышения эффективности. Таким образом, два 4K считывания может стать одним 8K считыванием перед тем, как в конечном итоге быть переданы диску. Поэтому запрос будет считаться одним, и это поле позволяет вам узнать, как часто это было сделано.

Поле 3 -- число считанных секторов, чтение которых прошло успешно. 

Поле 4 -- миллисекунд, потраченных на чтение. 

Поле 5 -- число запросов на запись, выполенных успешно.

Поле 6 -- число объединённых запросов на запись. Запросы на чтение и запись, примыкающие друг к другу, могут быть объединены для повышения эффективности. Таким образом, два 4K считывания может стать одним 8K считыванием перед тем, как в конечном итоге быть переданы диску. Поэтому запрос будет считаться одним, и это поле позволяет вам узнать, как часто это было сделано.

Поле 7 -- число секторов, записанных успешно.

Поле 8 -- миллисекунды, потраченные на запись.

Поле 9 -- число запросов ввода-вывода, активных в данный момент. Единственное поле, которое должно стремиться к нулю.

 Поле 10 -- миллисекунд, потраченных на выполнение запросов ввода-вывода. 

Поле 11 -- взвешенное количество миллисекунд, потраченных на ввод-вывод. Может использоваться как простая мера производительности ввода-вывода.




Смена планировщика ввода-вывода на лету

Как нам намекает документация, планировщик ввода-вывода может быть изменён в любое время на лету, хотя может быть небольшая задержка из-за того, что все запросы предыдущего планировщика должны быть обработаны прежде, чем запустится новый. Чтобы узнать, какой планировщик стоит сейчас, даём команду:
cat /sys/block/sdX/queue/scheduler
Заменяя sdX на интересующее нас устройство. Текущий планировщик отмечен в квадратных скобках:
noop anticipatory deadline [cfq]
То есть сейчас стоит cfq - Completely Fair Queuing, полностью честный планировщик. Планировщики для разных дисков могут быть:
  • noop часто наилучший выбор для файловых систем в памяти (например ramdisk) и других устройств без механических частей (флешек), где попытки оптимизировать ввод-вывод приводят лишь к напрасной трате ресурсов.
  • as (anticipatory) по воплощённым в нём идеях схож с deadline, но более навороченный и пытается оптимизировать ввод-вывод с упреждением. Удалён из ядер начиная с 2.6.33.
  • deadline лёгкий планировщик, который пытается установить жёсткий предел на задержки ввода-вывода.
  • cfq поддерживает честное распределение ввода-вывода между процессами, используя концепцию очередей (queue) для каждого процесса. CFQ разедляет синхронные и асинхронные операции ввода-вывода, отдавая предпочтение синхронным операциям. Грубо говоря, CFQ не допускает ситуации, когда один процесс начнёт создавать много операций ввода-вывода, другие процессы могут ``голодать''. Имеет несколько параметров настройки.
Выбор планировщика зависит от задач и оборудования (любопытные бенчмарки для SSD). Более того, у каждого планировщика, как правило, есть настраиваемые параметры. Некоторые соображения можно почерпнуть из поста по ссылке.

Сменить планировщик можно на лету:
# echo "deadline" > /sys/block/sda/queue/scheduler
После этого планировщик для данного диска будет изменён. 
 


И другие каталоги...
 Содержимое других каталогов будет интереснее разработчикам, а не пользователям, и может сильно меняться от версии ядра Linux.

/sys/bus
Это структура шин данных в системе, которая показывает, какая шина куда подключена (например, контроллер USB может быть подключен к шине PCI), и какие устройства в каждой шине потенциально может поддерживать (наряду с соответствующими драйверами), и какие устройства существуют. Здесь есть символической ссылки, которые указывают на директории устройства в глобальном дереве устройств. Каждый тип шины данных представлен двумя подкаталогами: устройств и драйверов.
   
/sys/class
Хранит все классы устройств, зарегистрированные ядром. Используется для описания функционального типа устройств. Большинство подкаталогов содержат символические ссылки на каталоги device и driver. Например, физическое устройство типа мышь может ссылаться на объект ядра "мышь", на устройство input event и input debug. Классы могут включать в себя диски, разделы, последовательные порты, и т.д.  

/sys/devices
Содержит глобальную иерархию устройств: каждое физическое устройство, которые было обнаружено и зарегистрировано ядром.

Например, автор этих строк нашёл:
/sys/devices/virtual/thermal/thermal_zone0/temp  
показания температуры на процессоре в ноутбуке. Исключений два - platform devices и system devices.

Platform devices это периферия (подключаемые устройства), присущие конкретной платформе (порты ввода-вывода, legacy-устройства типа последовательного контроллера или контроллера дискет [floppy controller]).

System devices это устройства, интергрированные в платформу, например аппаратные регистры для доступа к конфигурированию, которые не имеют возможностей обмениваться данными. Обычно для них нет драйверов (процессор, таймеры и другое).
   
/sys/firmware
Cодержит интерфейсы для просмотра и манипулирования firmware-специфичными объектами и их параметрами. Как правило, это платформо-зависимый код, который выполняется в системе при включении, например BIOS.  

/sys/module
Cодержит подкаталоги для каждого загруженного модуля ядра. Имя каталога отражает имя модуля. Ядро имеет глобальное пространство имён для всех модулей. Подкаталоги содержат параметры, специфичные для каждого загруженного модуля. Эта информация используется для отладки и простым смертным не будет интересна.  

/sys/power
Это скорее заделка на будущее. Может содержать название состояния, которое позволит процессу переходить в режим пониженного энергопотребления.
В зависимости от версии ядра, в /sys могут появляться и другие каталоги.


Ссылки
Есть любопытный документец [1] The sysfs Filesystem, OLS'05 на 14 страниц, написанная тем водянистым и пустозвонным стилем, коий так не переваривает автор этих строк. Документация к ядру тоже не особенно жаждет подробно рассказать о том, что означают все эти переменные и отгораживается вот этим:

TODO: Finish this section.
Понятно, что это самое туду не входит в приоритетный список дел. Но кое-что выудить всё-таки можно. Надеюсь, что этот пост несколько приподымет завесу тайны с файловой системы /sys.
Читать далее

Debian и Logical Volume Manager: установка и перенос Linux на другой диск с LVM



22 коммент.
Это гостевой пост автора iv_vl. Оригинальный пост доступен по этой ссылке.

Ничто так не нарушает привычного комфорта работы в Debian как необходимость изменения разделов на диске с системой. Изначально трудно подобрать разделы так, чтобы избежать их последующего переполнения или неоправданно много пустующего места. Могут быть и другие причины, в силу которых придётся менять разделы на рабочем Linux, что может доставить массу хлопот. Если нет желания проходить через изменение и перенос разделов — подумайте об установке Linux на LVM.
Читать далее

Возможности настройки GRUB2 в Linux: от серьезных параметров до бесполезных украшательств



31 коммент.
Эта статья является вольным переводом GNU GRUB Manual, структурированной выжимкой по интересующей нас теме. Мы не будем рассматривать вопрос установки и запуска GRUB'ом той или иной операционной системы. Мы посмотрим, какие возможности предоставляет GRUB2 версии 1.99 для собственной настройки. Ведь, как известно, "в Линукс можно настроить абсолютно все! И вы будете настраивать абсолютно все!"

Читать далее

Шифрование разделов и файлов в Linux с помощью loop-device и AES алгоритма



26 коммент.
Способов шифрования в Linux много, но в данном случае будет показан простой и быстрорастворимый метод с использованием cryptoloop. С его помощью мы можем шифровать как отдельные разделы (например, создать зашифрованный раздел на флешке), либо сделать криптофайл (зашифрованный файл, внутри которого хранятся ценные данные). Последнее особенно удобно для личного применения.

Читать далее

Перенос Linux на другой диск



39 коммент.
Часто бывает нужно уже настроенную операционную систему Linux перенести на другой диск вместе со всеми рюшечками, бубенчиками и свистульками. Перенести Linux с одного диска на другой довольно просто, но тут есть несколько моментов, чему данная записка дебианщика и посвящена.
Читать далее

Пример библиотеки для скриптов на языке bash - shell-framework



22 коммент.
Это гостевой пост автора Beggy. Оригинальный пост доступен по этой ссылке.

О чем все это?
Библиотека shell-framework - это набор функций, которые вы можете вызвать из своего скрипта. Она была задумана для облегчения создания скриптов на языке bash и полностью написана на этом языке. В основном библиотека писалась для упрощения работы с опциями командной строки, генерации краткой справки(help-а) скрипта и работы с конфигурационными файлами. В этой статье я постараюсь показать как именно можно упростить написание рутинного кода, связанного с этими задачами, используя shell-framework.

Читать далее

Файл подкачки: swap-файл и swap-раздел в Linux



31 коммент.
Все мы знаем, что swap-файлы в Linux делаются просто и легко - настолько просто, что иногда забываем, как это делается. Прежде, чем что-то создавать, хорошо бы узнать, сколько swap-пространства у нас уже имеется в системе - для этого следует дать команду в консоли от рута:
# swapon -s
Результат будет в виде:

Filename Type Size Used Priority
/dev/hda1 partition 289128 0 -1

Описание вывода команды:
  • Filename описывает имеющиеся у вас своп-пространства и где они находятся.
  • Type указывает тип пространства: partition (раздел) или file (файл).
  • Size сообщает общий размер Swap-пространств.
  • Used говорит о том, сколько сейчас свопа задействовано.
  • Priority указан приоритет, т.е. какие пространства системе использовать вначале.
Тот же самый результат мы получим по команде cat /proc/swaps

Создание swap-файла в Linux
1. Открываем консоль\терминал и получаем полномочия root или используем sudo:
$ su
2. Думаем*, какой размер swap-файла нам нужен в мегабайтах. Подумавши, даём команду:
sudo dd if=/dev/zero of=/swapfile bs=1M count=500
или
# dd if=/dev/zero of=/swapfile bs=1M count=500
В команде dd для задания размеров можно использовать суффиксы K, M, G для килобайт, мегабайт и гигабайт соответственно. В данном примере это 500 Mегабайт файла подкачки.

* Многие задаются фундаментальными вопросами бытия вроде "каков рекомендуемый размер swap в linux"? Можно не думать, а просто создать SWAP-файл по размеру оперативной памяти, периодически посматривая на её, подкачки, использование с помощью команды top. При необходимости добавить\уменьшить своппинг системе. Можно использовать несколько файлов подкачки.

3. Поясняем системе, что созданный пустой файл это всё-таки файл подкачки для Linux:
sudo mkswap /swapfile
или
# mkswap /swapfile

4. Подключаем созданный swap-файл:
sudo swapon /swapfile
или
# swapon /swapfile
При этом в выводе команды top или команды free должно появиться упоминание, что свопинга в системе поприбавилось. Чтобы отключить файл подкачки, пишем
sudo swapoff /swapfile
или
# swapoff /swapfile
Чтобы не подключать swap-файл или swap-раздел каждый раз, полезно занести запись в /etc/fstab следующего содержания:
/swapfile none swap sw 0 0
На всякий случай отмечу, что каждый раз создавать swap-файл не нужно: просто подключаете и отключаете его с помощью swapon/swapoff. Работа со swap-разделами в Linux происходит аналогичным образом.


Приоритет SWAP-файлов
Создавать и использовать swap-файлов в Linux можно любое количество. При этом можно указать приоритет подключаемого swap-файла или раздела (хотя ядро умеет самостоятельно распределять по разделам/файлам подкачки).

Например, высший приоритет для файла подкачки задаётся так:
swapon -p 1 /opt/swapfile
Приоритет является целым числом от 0 до 32767.


Очистка swap-пространства после ресурсоёмких приложений
Командой swapoff -a, запущенной от имени root, можно отключить использование всех разделов и файлов подкачки. После ввода команды содержимое свопа за несколько минут загружается обратно в оперативную память, а сам раздел подкачки отключается.
После загрузки содержимого свопа в оперативную память включем своп обратно командой swapon -a.


2. Системные настройки использования своппинга - Linux
За интенсивность обращения системы к swap-файлам и swap-разделам отвечает параметр swappiness, равный по умолчанию 60. Значение параметра может быть в пределах от 0 - наименьшее использование подкачки, до 100 - подкачка используется часто.

Насчёт оптимального значения параметра
swappiness есть много разных мнений. Так, например, один из ведущих разработчиков ядра Эндрю Мортон считает, что для десктопа лучше ставить большое значение, чтобы всякое bloatware скинуть в своп и использовать оперативную память для чего-то нужного.

Чрезмерное значение здесь приведёт к интенсивному использованию swap-файла, что нежелательно. Слишком маленькое значение может привести к тому, что при заполнении памяти будет принудительно запущен OOMkiller (процесс, запускающийся при исчерпании памяти и убивающий наиболее ресурсоёмкие задачи).

Временно (до перезагрузки системы) изменить этот параметр можно с помощью команды:

echo 50 > /proc/sys/vm/swappiness

Чтобы изменить значение по умолчанию, необходимо изменить параметр vm.swappiness:

vm.swappiness=50

в файле /etc/sysctl.conf

Следует, впрочем, отметить, что со vm.swappiness сильно перегибать палку не стоит. При больших значениях система потеряет в отзывчивости (будет вытеснять память, с которой работают приложения, в своп, хотя оперативной памяти ещё много). При малых значениях система работает отзывчивей, но когда оперативная память заканчивается, система начинает активно свопиться и притормаживать.

Также можно попробовать увеличить\уменьшить объём потребляемой системой памяти за счёт изменения размеров дискового кеша. Уровень выделяемой под кеш памяти хранится в
/proc/sys/vm/vfs_cache_pressure
Значение по умолчанию: 100. Чтобы использовать меньше памяти под дисковые кеши (что вообще говоря не есть хорошая идея), ставим значение 50. Если, наоборот, хочется больше отзывчивости системы, увеличиваем размер кеша не скупясь:
echo 1000 > /proc/sys/vm/vfs_cache_pressure
и далее продолжаем играться с параметрами вплоть до полного удовлетворения. Для того, чтобы настройки стали постоянными, заносим параметр
vm.vfs_cache_pressure = 1000
в файл /etc/sysctl.conf и со следующей загрузки дисковые кеши будут смачно чавкать вашей оперативной памятью.

Ссылки
Источники вдохновения здесь, там, среди замечательных комментариев к этому посту и кое-что из Цифровой кладовки.
Читать далее

Виртуальный диск в памяти: как создать ramdisk в Linux?



15 коммент.
Бывают задачи, когда нужно работать с большим количеством мелких файлов и делать это по возможности быстро, без завязок на меееедленную файловую подсистему. Ветераны вспомнят о том, что есть такой виртуальный диск, он же - RAM-дисках (ramdisk) и будут совершенно правы - это действительно выход, а сделать ramdisk в Linux можно буквально в один клик на клавиатуре.

Собственно, в ядре должна быть поддержка tmpfs, и если вы (или авторы вашего дистрибутива) не любители усложнять себе жизнь, она там должна быть.
Быстренько создаём новую точку монтирования:
# mkdir /mnt/tmpfs/
# chmod 777 /mnt/tmpfs/
и даём все права на использование. После этого даём команду (от рута или через sudo):
# mount -t tmpfs -o size=xxxM tmpfs /mnt/tmpfs/
или
$ sudo mount -t tmpfs -o size=xxxM tmpfs /mnt/tmpfs/
где xxxM есть размер RAMdisk в Мегабайтах.
Будьте осторожны и не размахивайтесь слишком широко: если вы попросите создать ramdisk больше, чем имеете оперативной памяти, система начнёт сгружать всё в swap-файл и дела пойдут очень медленно и грустно.

Если же вы хотите изменить размер ramdisk - это просто:
# mount -o remount -o size=yyyM /mnt/tmpfs/
или
$ sudo mount -o remount -o size=
yyyM /mnt/tmpfs/
При этом содержимое диска не пропадёт, но его размер тут же увеличится (при уменьшении также ничего не пропадёт, если только данных не больше, чем диск).

Другие способы создания виртуальных дисков в памяти хорошо описываются в англоязычном посте.

Предупреждаю особо горячих финских парней: это RAM-диск, а это значит, что всё его содержимое после отключения питания машины будет безвозвратно потеряно. Будьте бдительны.

Ссылки
Есть толковые посты о том, как в Linux сделать виртуальный диск в памяти здесь и тут.
Читать далее

Быстрая смена каталогов в консоли Linux с помощью WCD



15 коммент.
Для того, чтобы быстро прыгать по каталогам в Linux, можно использовать разные продвинутые оболочки типа zsh, а можно прикрутить маленький костылёк wcd к старому-доброму bash. О том и пост - самому не забыть и читателя потешить :-)

Итак, что мы имеем после установки wcd? Набираем часть имени каталога, нажимаем Enter и видим варианты - выбираем один из них и тут же перелетаем в нужный нам каталог.




Как установить Wcd?
Установка проста:

aptitude install wcd
Далее создаём ссылку на wcd.exec в домашнем каталоге:
ln -s /usr/lib/wcd/wcd.exec ~/bin
либо (для новых версий)

ln -s /usr/bin/wcd.exec ~/bin

и добавляем следующую функцию в стартовый файл .bashrc оболочки bash:
function wcd
{
$HOME/bin/wcd.exec $*
. $HOME/bin/wcd.go
}
 
После этого следует перезалогиниться или создать новую оболочку (открыть новый таб).

Как использовать WCDДля этого сначала создадим деревья директорий. Например

$ wcd -A .
Точка в конце говорит о том, что создаём деревья директорий, начиная с текущей. Должно ответить просто:
Wcd: Please wait. (re)Scanning disk. Building treedata-file from /home/beast
И всё. Теперь получаем удовольствие.
Итак, есть каталог /home/beast/docs/matlab/Sci/cvkonnik
Но набирать это всё долго и лениво. Вместо этого пишем:


$ wcd cvk*
И нажимаем большую и любимую клавишу Enter. При этом в консоли выдаётся менюшка вида:
a /home/beast/docs/matlab/Sci/cvkonnik
b /home/beast/docs/matlab/docus/Work/otherscidocs/Sci/cvkonnik

Wild match for 2 directories. w=up x=down ?=help Page 1/1
Please choose one ( to abort):

Нажимаю букву b и тут же перелетаю в нужный мне каталог:

beast@notebeast:~/docs/matlab/docus/Work/otherscidocs/Sci/cvkonnik$
И все дела. Очень удобно и очень здорово!

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

wcd IST*
-> /home/beast/docs/matlab/docus/articles/SPIEproceedings/IST2009
beast@notebeast:~/docs/matlab/docus/articles/SPIEproceedings/IST2009$


Обновление дерева каталогов
Если у вас добавился новый каталог, то wcd автоматом его, увы, не подхватит. Но это не беда - просто пересоздадём деревья директорий:

$ wcd -A .

И после этого ваши новые каталоги снова в строю.

Ссылки
На всякий случай WCD расшифровывается как Wherever Change Directory. Сайт автора программы, но он очень аскетичен. Также толковую статью по wcd можно найти на ЛинСовете
тут. Замечательная статья по поводу WICD есть на блоге Максима Иванова.
Читать далее

Дата и время в Linux



19 коммент.
В UNIX время имеет огромное значение: демоны вылязят для свершения тёмных злодеяний по crontab, в логах фиксируется время сообщений, а файловые системы хранят информацию о том, когда файл в последний раз обновлялся. Для поддержания времени есть в Linux есть команда date, и у неё есть множество других замечательных возможностей, о которых владельцы UNIX-систем могут и не догадываться. Итак...


Дата и время
Просто просмотреть время в Linux можно командой:
$ date

Чтв Авг 21 14:07:23 MSD 2008

Чтобы изменить время часов, нужно заделаться рутом и написать:
$ date MMDDhhmm
То есть в виде МесяцДеньЧасМинута, остальное [MMDDhhmm[[CC]YY][.ss]] по вкусу. Об это хорошо (и главное в самом верху) написано в мануале man date, однако остальное писалось, по всей видимости, роботами для роботов.

Среди функций date есть также вычисление дат. Например, вы хотите узнать, какое число было вчера:
$ date --date="yesterday" +%F
или
$ date --date="1 days ago" +%F

2008
-08-13
Или, скажем, какое число будет в воскресенье через две недели:
$ date --date="sunday next 2 week"

Sun Aug 31 01:00:00 EEST 2008

Если специально не оговаривать срок, то названия дней недели командой date будут восприниматься как ближайшие. Например, узнать дату ближайшей пятницы:

$ date --date="friday" +%F

2008-08-15
Тот же результат вы получите, если добавите ко дню недели слово this то есть date --date="this friday" +%F

Прошедшие дни недели указываются при помощи ключевого слова last например, какое число было в прошлую пятницу:
$ date --date="last friday" +%F

2008-08-08

Думаю, что это хороший повод ещё разок за рюмкой чая почитать man date здесь (на русском).


Консольный календарь в Linux
А ещё можно смотреть не просто на даты, а на календарик в консоли - для этого есть замечательная команда cal - без параметров она выдаст календарь на текущий месяц:
Июль 2009
Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Если же вам нужен календарь на год:
$ cal 2009
получим календарь на 2009 год. Календарь на месяц можно приготовить так:
$ cal 02 2009
выдаст календарь на февраль 2009 года. Помимо cal существует также ncal — Если же нужен «вертикальный» календарик, вроде

Февраль 2010
Пн 1 8 15 22
Вт 2 9 16 23
Ср 3 10 17 24
Чт 4 11 18 25
Пт 5 12 19 26
Сб 6 13 20 27
Вс 7 14 21 28

это можно сделать с помощью команды ncal. Хотя на самом деле, cal в современных дистрибутивах - просто ссылка на ncal, который смотрит как его вызвали и решает, симулировать ли ему поведение cal.

Ещё у команде cal очень полезен ключ -3, показывает текущий месяц, предыдущий и слудующий:
$ cal -3
и получаем:

Февраль 2012 Март 2012 Апрель 2012
Пн Вт Ср Чт Пт Сб Вс Пн Вт Ср Чт Пт Сб Вс Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5 1 2 3 4 1
6 7 8 9 10 11 12 5 6 7 8 9 10 11 2 3 4 5 6 7 8
13 14 15 16 17 18 19 12 13 14 15 16 17 18 9 10 11 12 13 14 15
20 21 22 23 24 25 26 19 20 21 22 23 24 25 16 17 18 19 20 21 22
27 28 29 26 27 28 29 30 31 23 24 25 26 27 28 29
30

Вызвав ncal с полезной опцией -w:
$ ncal -w
получим календарик с номерами недель:

$ ncal -w 02 2009
Февраль 2009
Пн 2 9 16 23
Вт 3 10 17 24
Ср 4 11 18 25
Чт 5 12 19 26
Пт 6 13 20 27
Сб 7 14 21 28
Вс 1 8 15 22
5 6 7 8 9

Кстати, этот вывод очень хорошо вставляется в Inkscape и далее можно быстро набросать простой календарик для ежедневника.


Часовые пояса в Linux
Если вы куда-то далеко переезжаете, то потребуется на ноутбуках менять часовые пояса. Тут нас выручит утилита tzselect. Для этого можно использовать утилиты tzselect (выбрать часовой пояс временно) и tzconfig (поставить часовой пояс постоянно). Например, быстренько посмотреть, сколько времени сейчас на другом конце света можно так:
dot:/home/dot# tzconfig
WARNING: the tzconfig command is deprecated, please use:
dpkg-reconfigure tzdata
dot:/home/dot
Чтобы не пришлось делать это каждый раз, конфигурируем наши часовые пояса с помощью:
# dpkg-reconfigure tzdata

Current default timezone: 'Australia/Sydney'
Local time is now: Wed Feb 24 09:08:35 EST 2010.
Universal Time is now: Tue Feb 23 22:08:35 UTC 2010

Всё, теперь будет установлено Австралийское время.


Часы в Windows и Linux при двойной загрузке
Если у вас на одном компьютере Windows и Linux, то после загрузки Windows часы в Linux будут идти неправильно. Дело в том, что Linux устанавливает часы по GMT, и не важно, в каком часовом поясе (time zone) вы живёте. Далее, в зависимости от часового пояса, время добавляется или отнимается, чтобы получилось правильное время. Это стандарт, и Linux его соблюдает. Продукция Майкрософт никогда не славилась соблюдением стандартов, и это большая проблема Майкрософт: Windows при загрузке устанавливает часы иначе.

Логичным шагом было бы исправть это в Windows, однако это проще сделать в Linux. Для этого редактируем файл:
sudo vim /etc/default/rcS
и исправляем параметр с
UTC=yes
на
UTC=no
Сохраняем изменения и выходим. Теперь в Linux и Windows часы будут работать одинаково.



Ссылки
Пост основан на материалах ЛинСовета и конкретно на этом посте ув.тов.
Читать далее

Где скачать Linux бесплатно



29 коммент.
Многие сомневающиеся пингвиноводы и начинающие поклонники операционной системы Linux задаются вопросом откуда скачать Linux бесплатно. Однако сначала нужно разобраться, что же вам от Linux, собственно, нужно.

Вдруг кто не знал или забыл - Linux это только ядро операционной системы, которое работает непосредственно с железом и вам никак не видно. Чтобы привычно работать с компьютером, нужен дистрибутив Linux:
Дистрибутив Linux = ядро Linux + системный софт (загрузчик, консольная оболочка, графический сервер) + пользовательский софт (графическая среда, текстовые процессоры, графические редакторы, игры)


Linux "на посмотреть"
Для этого есть LiveCD и LiveDVD диски: нужно скачать ISO-образ, записать его на болванку, потом загрузиться с этого диска (в BIOS должно быть установлено "Загрузка с CD\DVD" или название привода). Для этого можно скачать что-нибудь из:
  • Knoppix Linux (скачать здесь): может служить не только для демонстрации возможностей Linux, но и для восстановления данных.
  • SLAX Linux (скачать здесь): очень маленький дистрибутив, вместится на Pocket CD (200Mb).
  • Ubuntu Linux (скачать здесь): и загрузочный ("живой", LiveCD), и установочный диск. Можно после просмотра и тестирования сразу же установить на винчестер.
Эти дистрибутивы, конечно, не единственные, но они должны дать определённое представление о том, что такое Linux, что он может и чего не может относительно ваших задач.


Linux для установки на десктоп
После того, как вы определились, что Linux вам всё-таки нужен, нужно выбрать дистрибутив Linux. Ответ на этот фундаментальный вопрос мироздания здесь: вам потребуется на русском языке ответить на несколько простых и незамысловатых вопросов, после чего автоматическая система подберёт дистрибутив Linux под ваши потребности и познания.
Для самых горячих и нетерпеливых: так как в примерно 80% случаев всем рекомендуют Ubuntu Linux как самый распространённый и дружественный к пользователю дистрибутив Linux, скачать Ubuntu Linux ЗДЕСЬ.

Linux в виде конструктора "хочу всё знать"
Если вы хотите скачать дистрибутив для того, чтобы разобраться в нём и создать для себя систему, в которой удобно работать, смотрите в сторону Debian, Slackware, Gentoo или Arch. Из этих дистрибутивов можно сделать всё, что угодно: и сервер, и десктоп, и кластер, и даже в кофеварку установить. Отличаются дистрибутивы, по большому счёту, системой установки программ и идеологией.
В том случае, если ваш выбор падёт на Debian, вам может пригодиться руководство по установке.
Читать далее

cfdisk и mkfs: разметка и форматирование разделов в Linux



28 коммент.
После приобретения нового винчестера или флешки нужно разбить свежее пространство на разделы и отформатировать их под требуемую файловую систему Linux. Это очень просто только почему-то об этом не пишут.

Создание раздела на жёстком диске в Linux
Для этого используем cfdisk (кто не может пережить псевдографический интерфейс, качает gparted). Для создания разделов потребуются привилегии root, добываемые командной su.
После этого пишем:
cfdisk /dev/hdb

Видим экран:


Нажимаем на New, создать раздел. Выбираем Primary (основной)


Создастся, нажимаем Bootable (если нужно, чтобы он был загружаемый).

Если уверены, что всё сделано правильно - записываем изменения, нажимаем Write и пишем yes


Как уже говорилось, создать раздел в Linux довольно просто, и это только что сделано. Всё, разделы созданы, выходим из программы, выбирая Quit.

Если на диске "битый" раздел
К примеру, таблица разделов на флешке повреждена настолько, что проще всё снести и создать заново - тогда делаем так: cfdisk -z /dev/hdb
Параметр -z создаёт нулевую таблицу разделов, и позволяет сразу начать формировать новую.


Форматирование дисков в Linux: как отформатировать диск или раздел в Линукс
Для этого сначала нужно выбрать файловую систему. Отвечу на сакраментальный вопрос: "файловая система Linux: какая лучше?"
- Ext3: надёжная, протестированная и многократно проверенная файловая система Linux систем, рекордов скорости не ставит, в большинстве случаев - оптимальный выбор.

- ReiserFS:
лучший выбор, если на разделе много мелких файлов; большие файлы копирует медленно и ощутимо грузит процессор, так что не для слабых машин.

- Xfs:
лучший выбор для файловых хранилищ, особенно файлов огромных размеров (iso-образы дистрибутивов и фильмы).

- Jfs:
не быстрая, но весьма стабильная файловая система и нетребовательна к ресурсам - мало грузит процессор и хороша на старых машинах и медленных ноутбуках.
Далее, по умолчанию в Debian поставлены утилиты ext3. Если нужных нет - ставим:
aptitude install reiserfsprogs xfsprogs jfsutils
После этого пишем:
sudo mkfs -t типФС /файл/устройства
где вместо типФС подставляем выбранную файловую систему:
  • reiserfs
  • ext3
  • jfs
  • xfs
Вместо /файл/устройства пишем имя форматируемого раздела, например /dev/hdb1. В нашем примере это выглядит так:
sudo mkfs -t ext3 /dev/hdb1
На экране будет происходить что-то вроде:



После форматирования раздел сразу же можно смонтировать и использовать. Создаём точку монтирования:
sudo mkdir /mnt/megadrive
и даём директории полные права:
sudo chmod 770 /mnt/megadrive
И монтируем:
sudo mount -t ext3 /dev/hdb1 /mnt/megadrive
Всё, разделы созданы и отформатированы.

Настройка файловой системы
ВНИМАНИЕ! Всё нижеописанное делается на ОТМОНТИРОВАННОЙ файловой системе!
Здесь нужно ещё отметить тот факт, что при форматировании в ext3, для пользователя root резервируется 5% места. Чтобы
убрать 5 процентное резервирование места для root в ext3 нужно дать команду:
# tune2fs -m 0 /dev/hdb1
После этого простому пользователю будет доступно всё место.

Так же имеет место быть принудительная проверка диска после некоторого количества загрузок. Если вам это не нужно, процедуру можно отменить командой:
# tune2fs -c 0 /dev/sda1
Либо сделать так, чтобы проверка происходила реже, например, 1 раз в 100 загрузок:
# tune2fs -c 100 /dev/sda1
Просмотреть свойства файловой системы можно командой
# tune2fs -l /dev/sda1
и узнать о ней много интересного. Если нужно, конечно.


Как отформатировать раздел в Линукс - графическая среда
Если консоль нагоняет ужас и хочется что-то графического - нужно установить gparted из репозитория. Запустится программа gpated в графическом режиме:


и графическими средствами урезаем диск до нужного размера (правая кнопка
мыши -> Move/Change size). Графический интерфейс программы прост,
главное - не забываем нажать на кнопку Apply для того, чтобы изменения
вошли в силу, и дождаться того, пока все операции выполнятся.


Если всё прошло гладко - выгружаем gparted и можно монтировать диск.

Информация о разделах винчестера
Иногда требуется узнать, какие разделы на винчестере есть и какая там файловая система. Для того, чтобы узнать информацию о разделах жесткого диска, набираем от root пользователя:
fdisk -l /dev/sda
в ответ получаем:

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xd0f4738c

Device Boot Start End Blocks Id System
/dev/sda1 1 61 489951 82 Linux swap / Solaris
/dev/sda2 * 15567 19457 31254457+ 83 Linux
/dev/sda3 62 15566 124543912+ 83 Linux
Откуда видим: есть три раздела, первый из них (/dev/sda1) это раздел подкачки (500 мегабайт). Второй раздел (/dev/sda2) на 30Гб, трейтий (/dev/sda3) на 120Гб. Активный раздел (который сейчас используется операционной системой) помечен звёздочкой.

Узнать, на каком разделе вы сейчас работаете, можно с помощью команды:
df .
точка на конце обязательна; получим:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 85864764 2733992 83130772 4% /home
собственно то же, что и в случае с fdisk -l == именно информацию о разделе.



Ссылки
Пост навеян этой краткой заметкой.
Комментаторам большое спасибо за конструктивную критику и меткие замечания.
Читать далее

Монтирование разделов и дисков в Linux



72 коммент.
Рано или поздно пользователи Linux сталкиваются с таким понятием как монтирование разделов и дисков в Linux. Многие, особенно бывшие пользователи Windows, испытывают трудности с монтированием разделов, хотя если задуматься, то всё очень просто и логично. Ниже приводятся описание процесса монтирования в UNIX-like системах и разбор наиболее типичных случаев. И даже если вы окружены графическим интерфейсом, знание консольных команд может очень пригодиться. Кроме того, узнав пару-тройку полезных команд UNIX, вы приобщитесь к этой чёрной магии и, может быть, начнёте её использовать.


Монтирование разделов в Linux - общие слова

Если ядро Linux опознало ваше устройство-носитель данных, то оно должно предоставить какой-то внешний интерфейс пользователю для работы с устройством. Этим интерфейсом является создание файлов-устройств в каталоге /dev

Пример:

Устройствам, подключённым к IDE, будут соответствовать файлы-устройства /dev/hda, /dev/hdb и так далее.

Устройствам типа SCSI, а также близкие им по духу SATA-устройства и USB-флешки, будут иметь файлы-устройства /dev/sda, /dev/sdb и тому подобное.

Если на диске есть разделы, то цифра в имени файла-устройства будет соответствовать номеру раздела.

Пример:

если на USB-флешке есть два раздела, то первый будет называться /dev/sda1, а второй /dev/sda2
Монтирование разделов = объяснение системе, как добраться до ваших данных и сделать их доступными для использования. Системе нужно объяснить три простые вещи:
  1. какая файловая система на разделе;
  2. какой файл-устройство вам нужно;
  3. куда его подключить для просмотра = точка монтирования;
Каталог, в котором вы будете просматривать содержимое ваших разделов, называется точкой монтирования (mount point). Поэтому нужно объяснить системе - командой или через графический интерфейс - что вы хотите смонтировать, куда и что за файловая система на этом разделе.

В переводе на язык UNIX, это звучит так:
mount -t vfat /dev/hda3 /mnt/storage

Если нужно часто монтировать одни и те же разделы, занесите их в /etc/fstab - это общесистемный конфиг, в котором указаны все необходимые разделы для монтирования. Редактировать этот файл может не абы кто, а только root. Так что разживитесь рутовыми полномочиями и редактируйте /etc/fstab

Файл /etc/fstab состоит из колонок,
разделителями между которыми являются символы табуляции (клавиша TAB). Вот пример содержимого файла /etc/fstab:
# /etc/fstab: static file system information.
#
#

/dev/hda2 / reiserfs notail,noatime 0 1
/dev/hdb /mnt/cdrom iso9660 ro,user,noauto 0 0
/dev/sda1 /mnt/flash vfat iocharset=koi8-r,codepage=866,rw,user,auto 0 0


Формат колонок такой:
  • Монтируемое устройство (файл-устройство, он же раздел, который вы хотите примонтировать)
  • Точка монтирования (в какую директорию в файловой системе монтировать)
  • Тип монтируемой файловой системы
  • Опции монтирования (кодировка языка, необходимость монтирования при старте)
  • Dump (обычно 0)
  • Pass (обычно 0)
Важно, чтобы вы вставляли Тab после каждой колонки при редактировании /etc/fstab

Ниже приводятся уточнения для каждого случая файловой системы, но идея монтирования разделов в Linux одна и та же.

mount -t vfat /dev/hda1 /home/vasya/tempdir
прикрутить тип FAT что прикрутить куда это прикрутить

Пишем буквально то, чего хотим: от имени суперпользователя, прикрутить логическую структуру с файловой системой
типа FAT, находящуюся в файле /dev/hda1, к каталогу /home/vasya/tempdir

После всех операций раздел следует размонтировать, чтобы данные на него записались из памяти - точно так же, как при работе с флешками в Windows. Для этого следует дать команду:
# umount /mnt/XX
или
$ sudo umount /mnt/XX
где
/mnt/XX - точка монтирования. Если ни одно приложение не работает с разделом, то раздел размонтируется, отключится и данные на него полностью запишутся. После этого устройство можно безопасно извлечь.

Чтобы посмотреть, что можно смонтировать, и увидеть информацию о разделах, можно воспользоваться командой (запуск от root):
# fdisk -l
Увидите что-то вроде:
Disk /dev/hda: 60.0 GB, 60011642880 bytes
255 heads, 63 sectors/track, 7296 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 36 289138+ 82 Linux swap / Solaris
/dev/hda2 * 37 7296 58315950 83 Linux
Всё очень просто и логично. Как и многое другое в UNIX.


Предварительные действия перед монтированием

Прежде, чем монтировать разделы, нужно создать точки монтирования. Точки монтирования следует создавать в каталогах
/mnt или /media.Пример: Для того, чтобы создать точку монтирования с названием /mnt/win в консоли даём команду:
$ sudo mkdir /mnt/win
или
# mkdir /mnt/win
и даём каталогу права доступа для обычных пользователей:

$ sudo chmod 777 /mnt/win
или
# chmod 777
/mnt/win
Это позволит считывать и записывать данные не только суперпользователю-руту, но и обычному пользователю. Даже если в системе вы - единственный пользователь. Свою точку монтирования в директории /mnt нужно создать для каждого раздела.Не бойтесь, если вы не знаете точно, как теперь называются ваши виндовые диски C:\ или D:\ и монтируйте разделы с указанием типа файловой системы fat или ntfs - если ошибётесь, раздел не примонтируется и вы увидите ошибку вроде
mount: wrong fs type, bad option, bad superblock on /dev/sda2,
missing codepage or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
Не боимся - просто нам команда mount сказала, что примонтировать у неё не получилось.

Далее приводятся описания нескольких типичных случаев монтирования разделов и файлов.


Как примонтировать раздел с файловой системой FAT в Linux
Самое главное здесь - кодировка. Замечательная корпорация Microsoft изобрела свою собственную кодировку CP866 для MS DOS, CP1251 для Windows и только в последнее время прозрела до UTF8. Благодарим Microsoft за изобретение велосипеда с треугольными колёсами и приступаем к монтированию.

Однократное монтирование FAT 

Временное, однократное монтирование, например, флешки, выглядит в командной строке так:
$ sudo mount -t vfat /dev/XX /mnt/YY -o iocharset=utf8,codepage=866,rw
или
# mount -t vfat /dev/XX /mnt/YY -o iocharset=utf8,codepage=866
Пример: монтирование типичной флешки выглядит так

$ sudo mount -t vfat /dev/sda1 /mnt/flash -o iocharset=utf8,codepage=866,rw
То есть монтируем раздел /dev/sda1 типа vfat в точку монтирования /mnt/flash
Постоянное монтирование FAT
Если нужно постоянно обращаться к этим разделам, правим /etc/fstab добавляя строку:

/dev/XX /mnt/YY vfat iocharset=utf8,codepage=866,user,rw 0 0
Пример: та же типичная флешка в /etc/fstab смотрится так
/dev/sda1 /mnt/flash vfat iocharset=utf8,codepage=866,user,rw 0 0
То есть монтируем раздел /dev/sda1 типа vfat в точку монтирования /mnt/flash После этого раздел FAT в Linux будет доступен. Отмонтирование по команде umount /mnt/flash
Как правильно говорят в комментариях, iocharset совпадает с текущей локалью - например, iocharset=utf8.



Как примонтировать раздел с файловой системой NTFS в Linux
Замечательная корпорация Microsoft изобрела не просто новый велосипед с треугольными колёсами NTFS, а ещё и закрыла его описание. Да так, что пришлось очень долго его взламывать и создавать драйвера обратной разработкой. О сложности проблемы даёт понять описание дефрагментации NTFS, что, как говорится, внушает.

Монтировать и записывать на NTFS в Linux, тем не менее, возможно благодаря героическим усилиям разработчиков, создавших драйвер NTFS-3g. Этот драйвер можно установить командой:
aptitude install ntfs-3g
или поискать пакет ntfs-3g в графической оболочке установки программ вашего любимого дистрибутива.


Однократное монтирование NTFS 

Временное, однократное монтирование, например, раздела с данными Windows, выглядит так:
$ sudo mount -t ntfs-3g /dev/XX /mnt/YY -o umask=0,nls=utf8
или
# mount -t ntfs-3g /dev/XX /mnt/YY -o umask=0,nls=utf8
Пример: монтирование раздела Windows с NTFS разделом выглядит так
$ sudo mount -t ntfs-3g /dev/sda1 /mnt/flash -o umask=0,nls=utf8
То есть монтируем раздел /dev/sda1 типа
ntfs-3g в точку монтирования /mnt/flash



Постоянное монтирование NTFS
Если нужно постоянно обращаться к этим разделам, правим /etc/fstab добавляя строку:
/dev/XX /mnt/YY ntfs-3g umask=0,nls=utf8,user,auto,rw 0 0
Пример: та же типичная флешка в /etc/fstab смотрится так
/dev/sda1 /mnt/windows ntfs-3g umask=0,nls=utf8,exec,user,auto,rw 0 0
Иногда в /etc/fstab это уже есть с настроками вида:

/dev/sda1 /mnt/windows ntfs-3g umask=0,nls=ru-RU.UTF-8 0 0
При такой записи всё нормально, кроме одного - файлы и каталоги с русскими именами не отображались, как-будто их не было вовсе. Чтобы это исправить, можно попробовать изменить на:


/dev/sda1 /mnt/windows ntfs-3g exec,user,auto,rw 0 0
То есть монтируем раздел /dev/sda1 типа ntfs-3g в точку монтирования /mnt/windows После этого раздел NTFS в Linux будет доступен.
Отмонтирование по команде umount
/mnt/windows



Как примонтировать CD/DVD диск в Linux
Всё проще - скорее всего, это уже сделано в вашем дистрибутиве. Тем не менее, привожу это здесь для примера.

Однократное монтирование CD/DVD 

Временное, однократное монтирование, например, DVD-диска с данными в Linux, выглядит так:
$ sudo mount -t iso9660 /dev/XX /mnt/YY
или
#
mount -t iso9660 /dev/XX /mnt/YY
Пример: монтирование DVD-диска с данными выглядит так

$ sudo mount -t iso9660 /dev/cdrom /mnt/dvd
То есть монтируем раздел /dev/cdrom типа iso9660 в точку монтирования /mnt/dvd


Постоянное монтирование CD/DVD
Если нужно постоянно обращаться к этим разделам, правим /etc/fstab добавляя строку:
/dev/XX /mnt/YY iso9660 user,ro 0 0
Пример: оптический диск в /etc/fstab смотрится так
/dev/cdrom /mnt/cdrom iso9660 user,ro 0 0
То есть монтируем раздел /dev/cdrom типа iso9660 в точку монтирования /mnt/cdrom После этого оптический диск в Linux будет доступен. Отмонтирование по команде umount
/mnt/cdrom



Как примонтировать ISO-файл или другой файл в Linux
Вы откуда-то скачали ISO-файл и хотите просмотреть его содержимое. Для этого в Windows есть такой костыль под названием Alcohol. В Linux и вообще в UNIX такие костыли не требуются, так как монтирование ISO-образа ничем для системы не отличается от монтирования CD/DVD-диска. Нужно только передать один параметр -o loop чтобы сообщить системе, что монтировать мы собираемся на петлевое устройство (loopback). Если делать это надо много и часто, можно воспользоваться программой GmountISO, описанной тут.

Для монтирования ISO-образа в командной строке даём команду:

$ sudo mount -t iso9660 file.iso /mnt/YY -o loop
или
#
mount -t iso9660 file.iso /mnt/YY -o loop
Пример: монтирование DVD-диска с данными выглядит так

$ sudo mount -t iso9660 file.iso /mnt/dvd -o loop
То есть монтируем файл file.iso типа iso9660 в точку монтирования /mnt/dvd на петлевое устройство loop
 

Точно так же можно монтировать любой CD/DVD образ, а также файл-образы сжатых\зашифрованных\экзотических файловых систем типа SquashFS. Отмонтирование по команде umount /mnt/dvd



Как примонтировать раздел с файловой системой EXT2/EXT3/ReiserFS/XFS/JFS... в Linux
Монтирование нормальных файловых систем проблем не создаёт. Приведу пример только с ext3, остальные файловые системы в Linux монтируются точно так же, только вместо ext3 подставьте буквально: ext2, reiserfs, xfs, jfs в зависимости от вашей файловой системы.

Однократное монтирование 

Временное, однократное монтирование, например, флешки, выглядит в командной строке так:
$ sudo mount -t ext3 /dev/XX /mnt/YY
или
# mount -t
ext3 /dev/XX /mnt/YY
Пример: монтирование раздела с данными выглядит так

$ sudo mount -t ext3 /dev/sda1 /mnt/data
То есть монтируем раздел /dev/sda1 типа ext3 в точку монтирования /mnt/data


Постоянное монтирование
Если нужно постоянно обращаться к этим разделам, правим /etc/fstab добавляя строку:
/dev/XX /mnt/YY ext3 user,auto,rw 0 0
Пример: та же типичная флешка в /etc/fstab смотрится так
/dev/sda1 /mnt/data ext3 user,auto,rw 0 0
То есть монтируем раздел /dev/sda1 типа
ext3 в точку монтирования /mnt/data После этого раздел EXT3 в Linux будет доступен. Отмонтирование по команде umount /mnt/data
Как узнать тип файловой системы на диске?


Для этого есть утилита file, которая может определить тип файловой системы, используемый файлом. Так как в UNIX/Linux/*BSD исповедуется принцип "всё есть файл", то раздел с файловой системой это тоже файл. Так что команда file выдаст нам информацию о файловой системе дисковых разделов - надо только указать программе воспринимать их как специальные файлы.

Используем опцию -s (–special-files) для выдачи информации о типе файловой системы блочного устройства. Пример:
# file -s /dev/sda1
или
$ sudo file -s /dev/sda1

получаем в ответ:
/dev/sda1: ReiserFS V3.6 block size 4096 (mounted or unclean) num blocks 17920496 r5 hash
То есть на разделе /dev/sda1 имеем файловую ReiserFS V3.6.
Или например:
# file -s /dev/sda1
выдаст в ответ:
/dev/sda1: x86 boot sector, code offset 0x58, OEM-ID "MSWIN4.1", sectors/cluster 64, reserved sectors 126, Media descriptor 0xf8, heads 255, hidden sectors 63, sectors 284237982 (volumes > 32 MB) , FAT (32 bit), sectors/FAT 34693, reserved3 0x800000, serial number 0x287d1dfa, unlabeled
Это поможет в определении того, какая файловая система (и намекнёт на то, какие данные там лежат) на данном разделе.


Что делать, если устройство в Linux не хочет размонтироваться!?Вы пытаетесь размонтировать раздел с данными (флешка, CD/DVD диск...) и получаете сообщение с ошибкой - устройство занято. Например, при выполнении команды umount /mnt/windows получаете сообщение вида:

umount /mnt/windows
umount: /mnt/windows: device is busy
Ну и что делать, если раздел в Linux не размонтируется!? Очень просто - посмотреть, какой процесс держит раздел или файл и не даёт отмонтировать его. Дальше либо закрыть это приложение, либо придушить его с помощью команды kill. Даём команду:
lsof | grep /mnt/windows
Вертикальная черта означает передачу вывода команды lsof программе grep и фильтрации по слову /mnt/windows
После этого вы получите ответ вида:
$ lsof | grep /mnt/windows
lsof: WARNING: can't stat() reiserfs file system /dev/.static/dev
Output information may be incomplete.
mc 14134 beast cwd DIR 8,1 4096 1 /mnt/windows

Стало быть, ваш раздел держит MC (Midnight Commander), который вы скорее всего открыли на другом рабочем столе и просто забыли о нём. Найдите это приложение, закройте его и отмонтируйте раздел снова - теперь проблема должна быть решена.


Ссылки и благодарности

В подготовке этого поста были использованы бессмертные труды Андрея Афанасенко и Сергея Черевко, а также материалы Убунту-форума.
Читать далее