суббота, 31 января 2009 г.

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

welinux.ru/How-to`s → Монтирование разделов

Рано или поздно пользователи 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
Монтирование разделов = объяснение системе, как добраться до ваших данных и сделать их доступными для использования. Системе нужно объяснить три простые вещи:
какая файловая система на разделе;
какой файл-устройство вам нужно;
куда его подключить для просмотра = точка монтирования;
Каталог, в котором вы будете просматривать содержимое ваших разделов, называется точкой монтирования (mount point). Поэтому нужно объяснить системе - командой или через графический интерфейс - что вы хотите смонтировать, куда и что за файловая система на этом разделе.

В переводе на язык UNIX, это звучит так:
1
2
3

mount -t vfat /dev/hda3 /mnt/storage

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

Файл /etc/fstab состоит из колонок, разделители между колонками параметров - табуляция (клавиша TAB). Вот пример содержимого файла /etc/fstab:
1
2
3
4
5
6
7
8

# /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 одна и та же.

1
2
3

mount -t vfat /dev/hda1 /home/vasya/tempdir


прикрутить тип FAT что прикрутить куда это прикрутить



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

После всех операций раздел следует размонтировать, чтобы данные на него записались из памяти - точно так же, как при работе с флешками в Windows. Для этого следует дать команду:
1
2
3

$ umount /mnt/XX

или
1
2
3

$ sudo umount /mnt/XX

где /mnt/XX - точка монтирования. Если ни одно приложение не работает с разделом, то раздел размонтируется отключится и данные на него полностью запишутся. После этого устройство можно безопасно извлечь.

Чтобы посмотреть, что можно смонтировать, и увидеть информацию о разделах, можно воспользоваться командой (запуск от root):
1
2
3

# fdisk -l

Увидите что-то вроде:
1
2
3
4
5
6
7
8
9

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. Для этого даём команду:
1
2
3

$ sudo mkdir /mnt/win

или
1
2
3

# mkdir /mnt/win

и даём каталогу права доступа для обычных пользователей:
1
2
3

$ sudo chmod 777 /mnt/win

или
1
2
3

# chmod 777 /mnt/win

Это позволит считывать и записывать данные не только суперпользователю-руту, но и обычному пользователю. Даже если в системе вы - единственный пользователь. Свою точку монтирования в директории /mnt нужно создать для каждого раздела.

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


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

Однократное монтирование FAT
Временное, однократное монтирование, например, флешки, выглядит в командной строке так:
1
2
3

$ sudo mount -t vfat /dev/XX /mnt/YY -o iocharset=utf8,codepage=cp866

или
1
2
3

# mount -t vfat /dev/XX /mnt/YY -o iocharset=utf8,codepage=cp866

Пример: монтирование типичной флешки выглядит так
1
2
3

$ sudo mount -t vfat /dev/sda1 /mnt/flash -o iocharset=utf8,codepage=cp866

То есть монтируем раздел /dev/sda1 типа vfat в точку монтирования /mnt/flash


Постоянное монтирование FAT
Если нужно постоянно обращаться к этим разделам, правим /etc/fstab добавляя строку:
1
2
3

/dev/XX /mnt/YY vfat iocharset=utf8,codepage=866,user,rw 0 0

Пример: та же типичная флешка в /etc/fstab смотрится так
1
2
3

/dev/sda1 /mnt/flash vfat iocharset=utf8,codepage=866,user,rw 0 0


То есть монтируем раздел /dev/sda1 типа vfat в точку монтирования /mnt/flash После этого раздел FAT в Linux будет доступен. Отмонтирование по команде
1
2
3

umount /mnt/flash

Как правильно говорят в комментариях, iocharset совпадает с текущей локалью - например, iocharset=utf8.



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

Но с этим надо жить, и это всё монтировать. Монтировать и записывать на NTFS в Linux, тем не менее, возможно, благодаря героическим усилиям ребят, создавших драйвер NTFS-3g. Этот драйвер можно установить командой:
1
2
3

aptitude install ntfs-3g

или поискать пакет ntfs-3g в графической оболочке установки программ вашего любимого дистрибутива.


Однократное монтирование NTFS
Временное, однократное монтирование, например, раздела с данными Windows, выглядит так:
1
2
3

$ sudo mount -t ntfs-3g /dev/XX /mnt/YY -o umask=0,nls=utf8

или
1
2
3

# mount -t ntfs-3g /dev/XX /mnt/YY -o umask=0,nls=utf8

Пример: монтирование раздела Windows с NTFS разделом выглядит так
1
2
3

$ sudo mount -t ntfs-3g /dev/sda1 /mnt/flash -o umask=0,nls=utf8

То есть монтируем раздел /dev/sda1 типа ntfs-3g в точку монтирования /mnt/flash



Постоянное монтирование NTFS
Если нужно постоянно обращаться к этим разделам, правим /etc/fstab добавляя строку:
1
2
3

/dev/XX /mnt/YY ntfs-3g umask=0,nls=utf8,user,auto,rw 0 0

Пример: та же типичная флешка в /etc/fstab смотрится так
1
2
3

/dev/sda1 /mnt/windows ntfs-3g umask=0,nls=utf8,user,auto,rw 0 0

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




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

Однократное монтирование CD/DVD
Временное, однократное монтирование, например, DVD-диска с данными в Linux, вглядит так:
1
2
3

$ sudo mount -t iso9660 /dev/XX /mnt/YY

или
1
2
3

# mount -t iso9660 /dev/XX /mnt/YY

Пример: монтирование DVD-диска с данными выглядит так
1
2
3

$ sudo mount -t iso9660 /dev/cdrom /mnt/dvd

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


Постоянное монтирование CD/DVD
Если нужно постоянно обращаться к этим разделам, правим /etc/fstab добавляя строку:
1
2
3

/dev/XX /mnt/YY iso9660 user,ro 0 0

Пример: та же типичная флешка в /etc/fstab смотрится так
1
2
3

/dev/cdrom /mnt/cdrom iso9660 user,ro 0 0

То есть монтируем раздел /dev/cdrom типа iso9660 в точку монтирования /mnt/cdrom После этого оптический диск в Linux будет доступен. Отмонтирование по команде
1
2
3

umount /mnt/cdrom




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

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

$ sudo mount -t iso9660 file.iso /mnt/YY -o loop

или
1
2
3

# mount -t iso9660 file.iso /mnt/YY -o loop

Пример: монтирование DVD-диска с данными выглядит так
1
2
3

$ sudo mount -t iso9660 file.iso /mnt/dvd -o loop

То есть монтируем файл file.iso типа iso9660 в точку монтирования /mnt/dvd на петлевое устройство loop
Точно так же можно монтировать любой CD/DVD образ, а так же файл-образы сжатых\зашифрованных\экзотических файловых систем типа SquashFS. Отмонтирование по команде
1
2
3

umount /mnt/dvd



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

Однократное монтирование
Временное, однократное монтирование, например, флешки, выглядит в командной строке так:
1
2
3

$ sudo mount -t ext3 /dev/XX /mnt/YY

или
1
2
3

# mount -t ext3 /dev/XX /mnt/YY

Пример: монтирование раздела с данными выглядит так
1
2
3

$ sudo mount -t ext3 /dev/sda1 /mnt/data

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


Постоянное монтирование
Если нужно постоянно обращаться к этим разделам, правим /etc/fstab добавляя строку:
1
2
3

/dev/XX /mnt/YY ext3 user,auto,rw 0 0

Пример: та же типичная флешка в /etc/fstab смотрится так
1
2
3

/dev/sda1 /mnt/data ext3 user,auto,rw 0 0

То есть монтируем раздел /dev/sda1 типа ext3 в точку монтирования /mnt/data После этого раздел EXT3 в Linux будет доступен. Отмонтирование по команде
1
2
3

umount /mnt/data




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

umount /mnt/windows
umount: /mnt/windows: device is busy

Ну и что делать, если раздел в Linux не размонтируется!? Очень просто - посмотреть, какой процесс держит раздел или файл и не даёт отмонтировать его. Дальше либо закрыть это приложение, либо придушить его с помощью команды kill. Даём команду:
1
2
3

lsof -n 2>&1 | grep /mnt/windows

Вертикальная черта означает передачу вывода команды lsof программе grep и фильтрации по слову /mnt/windows
После этого вы получите ответ вида:
1
2
3
4
5
6

$ lsof -n 2>&1 | 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), который вы скорее всего открыли на другом рабочем столе и просто забыли о нём. Найдите это приложение, закройте его и отмонтируйте раздел снова - теперь проблема должна быть решена.

Оригинал - http://mydebianblog.blogspot.com/2008/09/linux.html

*модифицировано в соответствии с замечанием товарища zb
zb29.01.09 06:53 +0
что бросилось в глаза -
lsof -n лучше использовать, - сокеты бывают и не местными
вообще команду эту лучше вот так юзать:

lsof -n 2>&1 | grep /mnt/windows
KerneL29.01.09 07:03 +0
Разумно, кстати. Спасибо, поправил



Username29.01.09 11:32 +0
Статья хороша. Но вот два вопроса у меня:
1.) при монтировании для чтения-записи нтфс раздел в КДЕ по крайней мере при копировании туда чего-нибуь возникает сообщение типа Не удалось изменить права доступа к файлу <INSERT_NAME_HERE>. В чем дело?
2.) как монтировать zfs? дрова нужны?
KerneL29.01.09 15:48 +0
1)В NTFS не поддреживаются линуксовые права доступа. Поэтому и не может сменить аттрибуты. Попробуйте убрать dmask, fmask, default_permissions везде где монтируейте ntfs и поставить вместо них umask=0

Цитата: man mount
1
2
3
4
5
6
7
8
9
10
11
12
13
umask=value
Устанавливает биты полномочий. По умолчанию берутся биты
полномочий текущего процесса в восьмеричной форме (0..7).

dmask=value
Устанавливает биты полномочий только к каталогам. По умолчанию
берутся биты полномочий текущего процесса в восьмеричной форме
(0..7).

fmask=value
Устанавливает биты полномочий только к обычным файлам. По
умолчанию берутся биты полномочий текущего процесса в
восьмеричной форме (0..7).


2)Монтирование файловых систем ZFS

ZFS автоматически монтирует файловые системы при их создании или начальной загрузке системы. Команда zfs mount необходима только при изменении параметров монтирования, а также при явном монтировании или размонтировании файловых систем.

Команда zfs mount без аргументов используется для отображения всех смонтированных в настоящее время файловых систем под управлением ZFS. Старые точки монтирования не отображаются. Пример:
1
2
3
4
5
6
# zfs mount
tank /tank
tank/home /tank/home
tank/home/bonwick /tank/home/bonwick
tank/ws /tank/ws


Для монтирования всех файловых систем под управлением ZFS используется параметр -a. Старые файловые системы не монтируются. Пример:
# zfs mount -a



По умолчанию ZFS запрещает монтирование поверх непустого каталога. Для принудительного монтирования поверх непустого каталога необходимо указать параметр -O. Пример:
1
2
3
4
# zfs mount tank/home/lalt
cannot mount '/export/home/lalt': directory is not empty
use legacy mountpoint to allow this behavior, or use the -O flag
# zfs mount -O tank/home/lalt



Управление старыми точками монтирования должно осуществляться с использованием старых средств. Попытка применения средств ZFS приводит к ошибке. Пример:
1
2
3
4
# zfs mount pool/home/billm
cannot mount 'pool/home/billm': legacy mountpoint
use mount(1M) to mount this filesystem
# mount -F zfs tank/home/billm



При монтировании файловой системы используется ряд параметр монтирования на основе значений свойств, связанных с набором данных. Между свойствами и параметрами монтирования существует следующая корреляция:
Свойство

Параметры монтирования
devices

devices/nodevices
exec

exec/noexec
readonly

ro/rw
setuid

setuid/nosetuid

Параметр монтирования nosuid является псевдонимом для nodevices,nosetuid.
Взял тут

Комментариев нет: