Next Previous Contents

15. Диски и файловые системы

15.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 - там хорошее и подробное описание с объяснением команд.

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

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

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

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

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

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

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

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

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

снимает образ с cdrom.

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

Или поставить 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 тоже способны снимать имиджи.

15.5 Как смонтировать имидж компакт-диска? (Как получить доступ к содержимому образа в 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.

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

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

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

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

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

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

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

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

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 поменьше.

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

15.9 Как мне установить скорость 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.

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

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

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

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

 
mkfs.ext3
mkfs.vfat
mkfs.reiserfs

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

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

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

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

A: Нужна программа 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;
}

15.14 Как посмотреть раздел 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 и reiserfs - http://www.ghisler.com/plugins.htm

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

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

15.16 Как правильно смонтировать 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.

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

Добавить в /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.

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

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

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

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

15.20 Есть раздел под NTFS, как мне его увидеть из-под Linux? Могу ли я писать на 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 не собирается. Поэтому нужно зайти в любой репозиторий дополнительных программ и скачать пакет с поддержкой под свое ядро или собрать ядро самостоятельно, включив поддержку.

Настроить sudo на предмет разрешения вызова mount/umount с определёнными параметрами.

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

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

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

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

root@linux# tune2fs -j /dev/hda1

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

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

Вы уже догадались? НИКАК. И об этом написано в руководстве к тому же reiserfs, которое вы не читали. Переход с fat32 на ntfs на живом разделе обусловлен лишь тем, что ntfs специально писали с этим расчетом. Но никто не будет портить новую файловую систему лишь для того, чтобы оставить совместимость.

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

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

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

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

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

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

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

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

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

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

Для Linux:

root@linux# mount --bind src_dir dest_dir

Для FreeBSD:

root@freebsd# mount -t union src_dir dest_dir

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

root@linux# umount dest_dir

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

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

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

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

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

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

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

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

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

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

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


Next Previous Contents