Next Previous Contents

16. Диски, приводы CD/DVD-RW и файловые системы

16.1 Как записать компакт-диск (CD-R/CD-RW/DVD-RW)?

Можно записывать диск из консоли, можно воспользоваться программой с графическим интерфейсом. Во втором случае обычно используются программы K3B или XCDroast, отличающиеся дружественным интерфейсом, посему вопросов по их использованию почти не возникает.

Запись из консоли немного сложнее.

Для начала определимся - можно писать "налету", а можно сначала собрать образ, а потом записать его.

При работе с cdrtools, чтобы записать компакт-диск с русскими названиями файлов, чтобы MS Windows видела русские буквы, нужно собрать образ следующим образом:

user@linux$ mkisofs -jcharset koi8-r /one_of_your_folder | cdrecord -опции или user@linux$ mkisofs -r -jcharset koi8-r -o /path/to/image.iso /one_of_your_folder user@linux$ cdrecord -опции /path/to/image.iso

Вышеприведенный пример работает для локали koi8-r. Если у вас иная локаль, подставьте свое название!

У mkisofs опция -o указывает файл, в который будет записан образ. Опция -r почти наверняка нужна, без нее диск будет *читабелен* только под MS Windows. Опция -J при использовании -jcharset не нужна. Параметр у опции -jcharset - это кодировка (набранная в нижнем регистре), в которой "хранятся" имена записываемых файлов. Список поддерживаемых кодировок можно узнать из вывода mkisofs -jcharset help.

После создания образа его нужно записать с помощью программы cdrecord. Например, так: user@localhost$ cdrecord dev=1,1,0 -dao -v image.iso

Если вы хотите писать налету, то делаете простой pipeline: user@linux$ mkisofs -v -jcharset koi8-r -r /one_of_your_folder | cdrecord -dao -v fs=6m speed=24 dev=1,1,0 - Обратите внимание на "лишний" знак -. Он нужен для того, чтобы программа брала данные из потока, а не из конкретного файла.

Рекомендуем прочесть man cdrecord - там хорошее и подробное описание с объяснением команд.

Проверить качество записи можно несколькими способами.

16.2 Нужно ли включать эмуляцию SCSI для пишущего привода CD/DVD-RW?

Нужно для ядер версий 2.4.х и ниже. НЕ НУЖНО для ядер версий 2.6.х.х.

16.3 Как сделать, чтобы mkisofs писал файлы вместе с папками, а не скидывал все в корень?

Чтобы mkisofs сохраняя структуру, например, папки images и htmls, выполните:

user@linux$ mkisofs -v -J -r -graft-points images=~/images htmls=~/htmls | cdrecord ...

16.4 Как сделать, чтобы русские имена файлов, записанные xcdroast/k3b правильно читались на MS Windows?

В xcdroast кодировка указывается в "Скомпоновать дорожки->Параметры ISO9660 закладка Входная кодировка". Выходную оставьте по умолчанию (default). Если при указании кодировки все равно русских букв в MS Windows не видно, (например, в RedHat 9 без обновлений), попробуйте обновить свой mkisofs.

В K3B такой проблемы при правильно настроенной локали не возникает. Но нужно при выставлении настроек записи отметить в закладке "Файловая система" галочки "Создать расширение RockRidge" и "Создать расширение Joliet", после чего нажать кнопку "Сохранить настройки пользователя" - тогда вам не придется делать это каждый раз.

Примечание: оригинальная версия mkisofs не понимаю UTF-8. Стоит приложить вот такой патч - http://cvs.fedora.redhat.com/viewcvs/devel/cdrtools/mkisofs-iconv-10.patch?rev=1.1&view=log.

16.5 Как снять образ с компакт-диска (CD/DVD), с дискеты?

Воспользоваться командой dd, например

user@linux# dd if=/dev/cdrom of=cd.iso

снимает образ с cdrom (аналогично делается для дискетты, только устройство /dev/fd0).

Таким образом можно снять образ с любого раздела с любой файловой системой

Или поставить cdrtools и использовать readcd, например

user@linux# readcd dev=0,0,0 speed=16 -clone

Устройство вычисляется таким же образом, как и в cdrecord (cdrecord -scanbus)

Еще можно пользоваться командой cat:

user@linux# cat /dev/cdrom > ~/cdrom.iso

Программы с графическим интерфейсом XCDRoast и K3B тоже способны снимать имиджи.

О монтировании образов читайте следующий вопрос.

16.6 Как смонтировать имидж компакт-диска? (Как получить доступ к содержимому образа в iso9660)?

Есть два способа - один простой, другой чуть сложнее :)

Для обоих в ядре нужна поддержка loopback

  1. root@linux# mount -o loop -t fstype x.img /mnt/x смонтирует образ x.img с файловой системой fstype в директорию /mnt/x.
  2. Через losetup можно ассоциировать образ с /dev/loopX: root@linux# losetup /dev/loop1 x.img root@linux# mount -t fstype /dev/loop1 /mnt/x после окончания работы: root@linux# umount /mnt/x root@linux# losetup -d /dev/loop1 Этот способ дает возможность работать с образами, на которых несколько разделов - такое часто встречается у пользователей Apple. Для этого надо только знать смещение начала раздела, которое указывается параметром -o у losetup.

О снятии образов читайте предыдущий вопрос.

О монтировании образов не в формате iso9660 читайте следующий вопрос о преобразовании образов в формат iso9660.

Заметим, что существует ядерный модуль cdemu, позволяющий монтировать образы bin/cue без преобразования в iso9660.

16.7 Как смонтировать имидж в формате .img .bin .cue .nrg .ccd? Как сконвертировать имидж из формата .img, .bin .cue .nrg .ccd в iso9660?

Для начала давайте разберемся с форматами.

Формат .img понятие относительное, потому что в .img пишет и Nero и K3B, но в случае K3B это обычный iso9660 (часто такие файлы имеют расширения .iso).

Закрытые форматы .bin или .cue можно сконвертировать с помощью программы bchunk.

Формат .nrg можно сконвертировать с помощью программы nrg2iso. На сайте помимо исходников есть rpm.

Соответственно, чтобы подмонтировать такой образ, его нужно сконвертировать и дальше действовать как обычно.

Небольшое дополнение от Valerius:

Можно смонтировать nrg-образ вообще без никаких дополнительных утилит (высмыкнуто из mount-iso-image):

mount -t udf,iso9660 -o loop,ro,offset=307200 file.nrg /каталог/монтирования

Отсюда вытекает, что конвертацию nrg - > iso можно вообще сделать тривиальным dd с опцией skip.

Образы с clonecd (ccd) можно преобразовать с помощью утилиты ccd2iso

16.8 Как сделать раздел из файла? (Как сделать файловую систему в файле?)

Создаем файл нужного размера, делаем на нем файловую систему и монтируем ее в каталог: root@linux:~# dd if=/dev/zero of=aaa.fs bs=1024 count=100000 root@linux:~# mkfs.ext2 -F aaa.fs root@linux:~# mount -t ext2 -o loop aaa.fs /mnt/

Здесь имя файла - aaa.fs, и размер файловой системы - 100000 блоков по 1024 байта.

16.9 Как считать файлы с битого компакт-диска?

Если на диске фильм, например, и потеря некоторых данных не критична, можно снять образ с него вот такой командой:

user@linux# dd if=/dev/cdrom of=~/cd-image.iso bs=4b conv=noerror

Или подробнее,

user@linux# dd if=/dev/cdrom of=~/cd.iso conv=noerror,sync user@linux# mkdir ~/iso root@linux# mount -o loop ~/cd.iso ~/iso user@linux# cp ~/iso/ruleznyi_film.avi ~ root@linux# umount ~/iso user@linux# del cd.iso user@linux# mplayer -ao arts ~/ruleznyi_film.avi

Также можно использовать recoverdm ( http://www.vanheusden.com/recoverdm), sdd ( http://freshmeat.net/projects/sdd), readcd из пакета cdrtools.

Для надежности можно выставить скорость чтения с CD-ROM поменьше.

16.10 Как проверить читаемость записанного компакт-диска?

И можно воспользоваться специальной программой.

16.11 Как мне установить скорость CDROM?

Если это IDE-устройство и не используется ide-scsi (в ядрах 2.4 для записи CDR/RW), то можно пользоваться hdparm (команда -E):

root@linux# hdparm -E 8 /dev/cdrom

Аргумент команды -E - желаемая скорость (в данном случае 8x)

Вместо hdparm можно использовать eject: eject -x 8 /dev/cdrom

Если CDROM SCSI-устройство или используется ide-scsi, то hdparm не сработает. В этом случае можно попробовать программу cdspeed ( http://linuxfocus.org/~guido). Она работает с любым CDROM (IDE/SCSI), но часто сбрасывается при remount :(

Использование:

root@linux# cdspeed -s 8

Cкорость 8х, устройство по умолчанию /dev/cdrom, если устройство, например, /dev/hdc, то:

root@linux# cdspeed -s 8 -d /dev/hdc

Появились сообщения о том, что программа не работает с приводами, подключенными по USB.

16.12 Что где должно "лежать" в системе?

Возможно, поможет `man hier`. Если нет - Filesystem Hierarchy Standard

16.13 Чем и как создать/"отформатировать" разделы под linux?

В любой дистрибутив входит программа fdisk. После создания раздела нужно создать файловую систему (то, что в MS Windows называется "отформатировать"). Делается это с помощью программы mkfs.* Вместо * идет название файловой системы. Например:

mkfs.ext3 mkfs.vfat mkfs.reiserfs

16.14 Я поменял локаль и все русские названия файлов на ext3 (по вкусу) стали нечитаемыми. Как перекодировать названия/имена файлов?

Обычно мучаются при переходе с utf8 на koi8-r и наоборот. Есть специальная програмка на эту тему. convmv. Она точно работает.

Есть еще скрипт, но работает он или нет - не в курсе. Если кто рискнет проверить - сообщите о результатах. http://linux.alhimia.ru/projects/bash-scripts/NLS_repair/.

И еще можно испытать такой скрипт:

find . -depth | while read f ; do dir="${f%/*}" file="${f##*/}" nfile=`iconv -f koi8-r -t cp1251 <<<"$file"` if [ $? == 0 ] test "$nfile" = "$file" || mv "$f" "$dir/$nfile" || echo "$f" else echo "$f" fi done

А если у вас это входит в систему, попробуйте собрать Midnight Commander с таким патчем - http://ccphys.nsu.ru/~avpak/mc/. Если есть пожелания к патчу, можете высказать их здесь - http://www.nsu.ru/phpBB/viewtopic.php?t=446

16.15 Как перекодировать русские названия файлов в транслит?

Способ первый, хороший:

#!/bin/sh # Перекодирует рекурсивно в текущем каталоге имена # файлов и каталогов в транслит. shopt -s nullglob for NAME in * do TRS=`echo $NAME | tr абвгдезийклмнопрстуфхцы abvgdezijklmnoprstufxcy` TRS=`echo $TRS | tr АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ ABVGDEZIJKLMNOPRSTUFXCY` TRS=${TRS//ч/ch}; TRS=${TRS//Ч/CH} TRS=${TRS//ш/sh}; TRS=${TRS//Ш/SH} TRS=${TRS//ё/jo}; TRS=${TRS//Ё/JO} TRS=${TRS//ж/zh}; TRS=${TRS//Ж/ZH} TRS=${TRS//щ/sh\'}; TRS=${TRS//Щ/SH\'} TRS=${TRS//э/je}; TRS=${TRS//Э/JE} TRS=${TRS//ю/ju}; TRS=${TRS//Ю/JU} TRS=${TRS//я/ja}; TRS=${TRS//Я/JA} TRS=${TRS//ъ/\`}; TRS=${TRS//ъ\`} TRS=${TRS//ь/\'}; TRS=${TRS//Ь/\'} if [[ `file -b "$NAME"` == directory ]]; then mv -v "$NAME" "$TRS" cd "$TRS" "$0" cd .. else mv -v "$NAME" "$TRS" fi done

За скрипт благодарим Гирченко Валерия (Valerius)

Способ второй, сложный. Оставлен на всякий случай. Нужна программа translit и 2 нижеуказанных скрипта. http://rpm.pbone.net/index.php3/stat/4/idpl/423272/com/translit-1.03-1.i386.rpm.html

$ cat tr-walker.sh ---------------------------------------- #!/bin/bash TPWD=`pwd` `/usr/local/bin/mp3-translit.pl`; for f in *; do cd "$TPWD/$f"; TTPWD=`pwd` echo "Converting: $TTPWD"; `/usr/local/bin/mp3-translit.pl`; cd "$TPWD"; done $ cat mp3-translit.pl -------------------------------------- #!/usr/bin/perl -w use strict; use File::Copy; my $dirName=$ARGV[0]; $dirName ||='.'; my $file=''; my $cnt=0; opendir(DIR, "$dirName") or die "Can't opendir $dirName: $!"; while (defined($file=readdir(DIR))) { next if $file=~/^\.\.?$/; my $trFile=getTRname($file); if (-f $file) { `chmod 0644 "$file"` }; if (-d $file) { `chmod 0755 "$file"` }; move("$dirName/$file","$dirName/$trFile"); } closedir(DIR); sub getTRname { my $input=$_[0]; my $trFile=`echo "$input" | iconv -f UTF-8 -t KOI8-R | translit koi8-phg.rus`; $trFile=~s/[^a-zA-Z0-9\_\-\.\ ]//gs; $trFile=~s/\.+/\./g; $trFile=~s/\ /_/g; $trFile=~s/\_+/\_/g; $trFile=~s/\-+/\-/g; return $trFile; }

16.16 Как перевести кучу называний файлов в нижний регистр?

Запускаем mc, выбираем все файлы, жмем F6 и в поле указываем \L* и все наши имена файлов приведуться в нижний регистр.

Если просто в консоли, то можно сделать в одну строку следущее

find /<твой путь> -print | while read x ; do mv $x $(echo $x | tr 'A-Z' 'a-z'); done

16.17 Как посмотреть раздел ext2/ext3 под MS Windows?

Для NT и win 9.x - explore2fs: http://uranus.it.swin.edu.au/~jn/linux/

ext2 драйверы:

http://sourceforge.net/projects/ext2fsd/

http://sourceforge.net/projects/winext2fsd/

Plug-in под TotalCommander для ext2/3 и reiserfs - http://www.ghisler.com/plugins.htm

16.18 Как увидеть раздел ReiserFS из-под Windows?

Зайдите сюда - http://p-nand-q.com/download/rfstool.html

Plug-in под TotalCommander для ext2/3 и reiserfs - http://www.ghisler.com/plugins.htm

16.19 Как правильно смонтировать CD-ROM?

В /dev можно сделать ссылку c названием cdrom на /dev/hdx, где x - IDE-устройство. Для scsi-устройств, или ide, работающих в режиме эмуляции scsi это может быть scd0.

/etc/fstab: /dev/cdrom /mnt/cdrom iso9660 user,unhide,noauto,owner,ro,users,iocharset=koi8-r 0 0

После этого cdrom можно монтировать командой mount /dev/cdrom.

Если используемая locale utf8, а не koi8-r, то iocharset=utf8.

16.20 Как правильно смонтировать FAT-раздел?(vfat)

Добавить в /etc/fstab запись вида

/dev/hda1 /mnt/dos vfat iocharset=koi8-r,codepage=866,nouser,suid,rw,umask=000,showexec,quiet 0 0

Где, /dev/hda1 - /это FAT-раздел, а koi8-r - используемая в вашей системе локаль. Если локаль другая, пропишите ее!

Для suse все нужно сделать через YAST.

16.21 Все файлы на FAT-разделе отображаются исполняемыми, noexec тоже не помогает. Как это убрать?

В данном случае noexec не поможет, добавьте в /etc/fstab параметр showexec

16.22 При копировании файлов на раздел fat32 mc выдает сообщение об ошибке, но файлы копирует. Что делать?

Посмотреть как этот раздел прописан у вас в fstab - не хватает параметра quiet. Пример строчки здесь.

16.23 Есть раздел под NTFS, как мне его увидеть из-под Linux? Как сделать видимыми русские буквы на NTFS? Могу ли я писать на NTFS?

Прописываем в /etc/fstab строчку вроде

для локали koi8-r: /dev/hda1 /mnt/disk_c ntfs dmask=0,fmask=0111,iocharset=koi8-r,ro 0 0 для локали utf8: /dev/hda1 /mnt/disk_c ntfs dmask=0,fmask=0111,utf8,ro 0 0

где /dev/hda1 - название вашего диска, а /mnt/disk_c - каталог, который вы под него создали. В новых ядрах вместо "iocharset=..." лучше использовать "nls=...".

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

Как записывать на NTFS? Начнем с того, что это опасно и вы можете повредить свои данные на NTFS. Не говорите, что не предупреждал. Существует три способа:

А здесь можно почитать о состоянии поддержи NTFS на текущий момент - http://linux-ntfs.sourceforge.net/info/ntfs.html. Русское FAQ с этого сайта лежит здесь (внимание, оно довольно старое).

16.24 Как перейти с ext2 на ext3?

Собираем ядро с поддержкой ext3. Если ext2 была жестко вкомпилена в ядро (т.е. не модулем и вы не пользуетесь initrd), то так же собираем ext3.

Грузимся, в /etc/fstab пишем вместо ext2 ext3. Затем перегружаемся и грузимся с компашки (можем не перегружаться и просто смонтировать систему в read only) и даем команду вроде этой:

root@linux# tune2fs -j /dev/hda1

(hda1 - меняете на свой раздел). Перегружаемся. Если все работает, собираем ядро без поддержки ext2 - она не нужна.

16.25 Как без потери данных перевести раздел с ext3 на reiserfs, reiserfs на ext3, xfs на raiserfs и т.п.

Штатными средствами - никак. Файловые системы написаны без учета друг друга и поэтому в отличие от fat и ntfs не имеют общих корней. Тем не менее способ есть. Точнее есть утилита, которую вы можете использовать на свой страх и риск.

convertfs - http://members.optusnet.com.au/clausen/ideas/convertfs.txt

Утилита входит в состав Debian и порты gentoo. LVM тоже поддерживается.

Если хочется безопасного конвертирования, то лучше взять tar (а лучше cpio), забэкапить весь раздел и сделать новую файловую систему, после чего скопировать все обратно из архива.

Если кто-то узнает информацию о переходе с reiserfs3 на reiserfs4, пишите.

За дополнение ответа благодарим argin.

16.26 Как восстановить удаленный файл на ext2 (возможно 3)

Можно почитать об это здесь

И попробовать утилиту testdisk

16.27 Как восстановить таблицу разделов?

Попробовать утилиту gpart. Пользуйтесь очень осторожно.

16.28 Проверил ext3 с помощью e2fsck на разделе, смонтированном на запись. Утилита нашла кучу ошибок и вроде как их исправила. Когда я зашел на диск, оказалось, что половины файлов нет, у папок поменялись названия и т.п. Как все исправить?

Долго исправлялось? Тогда уже, наверно, никак. Можно глянуть предыдущий вопрос, может что выйдет.

16.29 Как подмонтировать одну директорию к другой?

Для Linux:

root@linux# mount --bind src_dir dest_dir

Для FreeBSD:

root@freebsd# mount -t union src_dir dest_dir

Размонтировать соответственно можно комадной

root@linux# umount dest_dir

16.30 Как создать жесткую ссылку на директорию?

Согласно man ln можно:

В существующих реализациях, если команда ln может создавать жесткую ссылку на каталог, то она может это делать только от лица суперпользователя. POSIX запрещает системному вызову link(2) и утилите ln создавать жесткие ссылки на каталоги (но не запрещает создавать жесткие ссылки на файлы, которые находятся на других файловых системах).

Директории также можно примонтировать одну к другой).

16.31 Чем проверить жесткие диски на наличие плохих секторов (badblocks)?

В состав e2fsprogs входит программа badblocks. Можно сразу использовать ее. И есть специальный скрипт, написанный под эту программу.

16.32 Как пометить плохой сектор на жестком диске?

Запустить программу проверки fsck с ключом -c.

Внимание! Никогда, ни при каких обстоятельствах, не проверяйте смонтированные разделы!

16.33 Как сделать так, чтобы при подключении нового винта система автоматически его монтировала?

Воспользоваться скриптом hdmount проекта Алхимия (я, jackill, им сам пользуюсь и уже давно).

16.34 Какая файловая система меньше всего подвержена фрагментации? Где взять дефрагментатор?

Файловые unix-системы практически не подвержены фрагментации из-за особенностей своего строения. Фрагментация обычно не превышает 1.5-2 процентов. Вот хорошая цитата на эту тему:

You don't need to defragment Linux filesystems. Not ext3, not ReiserFS. Defragmentation is only a conce

Поэтому с дефрагментаторами тоже туго. Был какой-то defrag, но поверьте, вам не нужны такие утилиты.

16.35 Какую файловую систему выбрать?

Когда работа ведется с большими файлами, рекомендуется использовать xfs. Для множества мелких - reiserfs. Наиболее надежной является ext3.

16.36 Какую выбрать файловую систему, чтобы на нее можно было писать и в Linux, и в MS Windows?

Корректно писать и читать в обоих операционных системах можно либо на ext2, либо на fat32 (vfat).

Плюс из MS Windows можно увидеть данные с reiserfs, а из Linux можно увидеть данные с NTFS.


Next Previous Contents