LOR-FAQ-Storage
Материал из Викиучебника
|
||
|
[править] Как записать компакт-диск (CD-R/CD-RW/DVD-RW)?
Можно записывать диск из консоли, можно воспользоваться программой с графическим интерфейсом. Во втором случае обычно используются программы K3B, Brasero или 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 - там хорошее и подробное описание с объяснением команд.
Проверить качество записи можно несколькими способами.
[править] Как сделать, чтобы mkisofs писал файлы вместе с папками, а не скидывал все в корень?
Чтобы mkisofs сохраняя структуру, например, папки images и htmls, выполните:
user@linux$ mkisofs -v -J -r -graft-points images=~/images htmls=~/htmls | cdrecord ...
[править] Как сделать, чтобы русские имена файлов, записанные xcdroast/k3b правильно читались на MS Windows?
В xcdroast кодировка указывается в "Скомпоновать дорожки->Параметры ISO9660 закладка Входная кодировка". Выходную оставьте по умолчанию (default). Если при указании кодировки все равно русских букв в MS Windows не видно, (например, в RedHat 9 без обновлений), попробуйте обновить свой mkisofs.
В K3B такой проблемы при правильно настроенной локали не возникает. Но нужно при выставлении настроек записи отметить в закладке "Файловая система" галочки "Создать расширение RockRidge" и "Создать расширение Joliet", после чего нажать кнопку "Сохранить настройки пользователя" - тогда вам не придется делать это каждый раз.
[править] Как снять образ с компакт-диска (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 тоже способны снимать имиджи.
О монтировании образов читайте следующий вопрос.
[править] Как смонтировать имидж компакт-диска? (Как получить доступ к содержимому образа в iso9660)?
Есть два способа - один простой, другой чуть сложнее :)
Для обоих в ядре нужна поддержка loopback
- root@linux# mount -o loop -t fstype x.img /mnt/x замонтирует образ x.img с файловой системой fstype в директорию /mnt/x.
- Через 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.
[править] Как смонтировать имидж в формате .img/.bin/.cue/.nrg/.ccd? Как сконвертировать имидж из формата .img/.bin/.cue/.nrg/.ccd в iso9660?
Для начала давайте разберемся с форматами.
Формат .img понятие относительное, потому что в .img пишет и Nero и K3B, но в случае K3B это обычный iso9660 (часто такие файлы имеют расширения .iso).
Файлы .bin/.cue можно записать с помощью cdrdao или сконвертировать с помощью программы 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
[править] Как сделать раздел из файла? (Как сделать файловую систему в файле?)
Создаем файл нужного размера, делаем на нем файловую систему и монтируем ее в каталог:
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 байта.
[править] Как считать файлы с битого компакт-диска?
Если на диске фильм, например, и потеря некоторых данных не критична, можно снять образ с него вот такой командой:
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.
- ddrescue (http://www.garloff.de/kurt/linux/ddrescue/)
- GNU ddrescue - более продвинутый вариант ddrescue (http://www.gnu.org/software/ddrescue/ddrescue.html)
Для надежности можно выставить скорость чтения с CD-ROM поменьше.
[править] Как проверить читаемость записанного компакт-диска?
- Простой способ - хватит подавляющему большинству людей: user@linux# dd if=/dev/cdrom of=/dev/null Если все скопируется, значит все в порядке.
- Сложный способ: скриптом http://fine.kalinovka.net/articles/hobby/lorFAQ/files/chindisk.tgz, написанным Obidos. Вызов: `chindisk /mnt/cdrom` Скрипт отловит ошибки с нечитаемыми не на физическом, а на логическом уровне каталогами/файлами (например, где-то неверно выставили права).
И можно воспользоваться специальной программой.
[править] Как мне установить скорость 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.
[править] Что где должно "лежать" в системе?
Возможно, поможет `man hier`. Если нет - Filesystem Hierarchy Standard
[править] Чем и как создать/"отформатировать" разделы под linux?
В любой дистрибутив входит программа fdisk (а во многие еще и cfdisk, очень простая в использовании, но менее мощная). После создания раздела нужно создать файловую систему (то, что в MS Windows называется "отформатировать"). Делается это с помощью программы mkfs.* Вместо * идет название файловой системы. Например:
mkfs.ext3 mkfs.vfat mkfs.reiserfs
[править] Я поменял локаль и все русские названия файлов на 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
[править] Как перекодировать русские названия файлов в транслит?
WARNING!!! При неопределённых условиях оба нижеприведённых варианта имеют проблемы с utf-8
A1: Нужна программа 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;
}
A2: Можно попробовать скрипт предложенный rymis (find . -exec translit.sh {} \;)
Если в этом скрипте использовать sed "y/ФУ/FU/" вместо tr "ФУ" "FU" то он замечательно работает и с UTF-8. (Авторский текст скрипта сохранён)
#!/bin/sh
NAME=""
TRANSLIT=""
TRTBL_l="s/ш/sh/g; s/ч/ch/g; s/щ/sh\'/g; s/ё/jo/g; s/ж/zh/g; s/э/je/g; s/ъ/\'/g; s/ь/\'/g; s/ю/ju/g; s/я/ja/g"
TRTBL_h="s/Ш/SH/g; s/Ч/CH/g; s/Щ/SH\'/g; s/Ё/JO/g; s/Ж/ZH/g; s/Э/JE/g; s/Ъ/\'/g; s/Ь/\'/g; s/Ю/JU/g; s/Я/JA/g"
translit()
{
local cnm
cnm="$NAME"
cnm=`echo -n $cnm | tr "абвгдезийклмнопрстуфхцы" "abvgdezijklmnoprstufxcy"`
cnm=`echo -n $cnm | tr "АБВГДЕЗИЙКЛМНОПРСТУФХЦЫ" "ABVGDEZIJKLMNOPRSTUFXCY"`
cnm=`echo -n $cnm | sed "$TRTBL_l"`
cnm=`echo -n $cnm | sed "$TRTBL_h"`
TRANSLIT="$cnm"
}
rename_file()
{
NAME="$1"
if [ "x$NAME" != "x" ] ; then
translit
echo "mv $NAME $TRANSLIT"
mv "$NAME" "$TRANSLIT"
fi
}
if [ "x$1" = "x" ] ; then
echo Uses translit.sh filename 1>&2
exit 1
fi
rename_file "$1"
А3. Есть ещё один способ, грязный и быстрый. Нужен iconv. Работает в любом случае, но часто корежит имена файлов. KOI-7 как-никак Ж:)
#!/bin/bash for i in * ;do name0="${i%.*}" echo $name0 > test iconv -c -f utf8 -t koi-7 test |sed s/" "/"_"/g|tr [:upper:] [:lower:] > test7 name=`cat test7` mv "$i" $name done rm test test7
[править] Как посмотреть раздел 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
[править] Как увидеть раздел ReiserFS из-под Windows?
Зайдите сюда - http://p-nand-q.com/download/rfstool.html
Plug-in под TotalCommander для ext2/3 и reiserfs - http://www.ghisler.com/plugins.htm
[править] Как правильно смонтировать 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.
[править] Как правильно смонтировать 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.
[править] Все файлы на FAT-разделе отображаются исполняемыми, noexec тоже не помогает. Как это убрать?
В данном случае noexec не поможет, добавьте в /etc/fstab параметр showexec
[править] При копировании файлов на раздел fat32 mc выдает сообщение об ошибке, но файлы копирует. Что делать?
Посмотреть как этот раздел прописан у вас в fstab - не хватает параметра quiet. Пример строчки здесь.
[править] Есть раздел под NTFS, как мне его увидеть из-под Linux? Как сделать видимыми русские буквы на NTFS? Могу ли я писать на NTFS?
Прописываем в /etc/fstab строчку вроде
для локали koi8-r:
/dev/hda1 /mnt/disk_c ntfs dmask=0,fmask=0111,nls=koi8-r,ro 0 0
для локали utf8:
/dev/hda1 /mnt/disk_c ntfs dmask=0,fmask=0111,utf8,ro 0 0
где /dev/hda1 - NTFS-раздел (узнать можно по команде fdisk -l), а /mnt/disk_c - каталог, который вы под него создали.
В новых ядрах вместо опции iocharset=... лучше использовать nls=....
В ядрах дистрибутивов RedHat по умолчанию поддержка NTFS не собирается. Поэтому нужно зайти в любой репозиторий дополнительных программ и скачать пакет с поддержкой под свое ядро или собрать ядро самостоятельно, включив поддержку.
Настроить sudo на предмет разрешения вызова mount/umount с определёнными параметрами.
Начнем с того, что это опасно и вы можете повредить свои данные на NTFS. Не говорите, что не предупреждал. Существует три способа:
- Собрать ядро с поддержкой записи на NTFS. На ядрах 2.4.x запись возможна только на NTFS от NT4.0, на ядрах 2.6 на любой NTFS. Однако есть одно но: вы можете писать в уже созданный файл (т.е. изменять его). Вы не сможете создать новый файл!
- Вы можете купить (или найти в какой-нибудь p2p сети) Paragon NTFS driver for Linux. Наилучший способ. Стоит все удовольствие $70. Одна маленькая неприятность - не работает с ядрами серии 2.6.х
Сайт: http://www.ntfs-linux.com - Продукт обратной разработки под названием captive. Позволяет читать и писать на NTFS. Недостаток: он медленно пишет и ему нужна пара файлов из MS Windows (причем один из них - драйвер NTFS).
Сайт: http://www.jankratochvil.net/project/captive - В рамках проекта Linux-NTFS разработан новый NTFS драйвер под Linux, распространяемый в соответствии с лицензией GPL, - NTFS-3G. При тестировании производительности, NTFS-3G оказался в два раза быстрее ext3 и на 20-50% производительнее коммерческого драйвера Paragon NTFS. ntfs-3g работает на уровне пользователя и выполнен в виде FUSE модуля.
Сайт: http://www.ntfs-3g.org/
[править] Как перейти с ext2 на ext3?
Собираем ядро с поддержкой ext3. Если ext2 была жестко вкомпилена в ядро (т.е. не модулем и вы не пользуетесь initrd), то так же собираем ext3.
Грузимся, в /etc/fstab пишем вместо ext2 ext3. Затем перегружаемся и грузимся с компашки (можем не перегружаться и просто смонтировать систему в read only) и даем команду вроде этой:
root@linux# tune2fs -j /dev/hda1
(hda1 - меняете на свой раздел). Перегружаемся. Если все работает, собираем ядро без поддержки ext2 - она не нужна.
[править] Как без потери данных перевести раздел с ext3 на reiserfs, reiserfs на ext3, xfs на reiserfs и т.п.
Вы уже догадались? НИКАК. И об этом написано в руководстве к тому же reiserfs, которое вы не читали. Переход с fat32 на ntfs на живом разделе обусловлен лишь тем, что ntfs специально писали с этим расчетом. Но никто не будет портить новую файловую систему лишь для того, чтобы оставить совместимость.
Поэтому берете в руки tar, бэкапите весь раздел и делаете новую файловую систему, после чего копируете все обратно из архива.
Если кто-то узнает информацию о переходе с reiserfs3 на reiserfs4, пишите.
[править] Как восстановить удаленный файл на ext2 (возможно 3)
Можно почитать об это здесь
И попробовать утилиту testdisk
[править] Как восстановить таблицу разделов?
[править] для начинающих пользователей
Попробовать утилиту gpart. Пользуйтесь очень осторожно.
[править] Для тех кто понимает, что делает (unDEFER)
рекомендации unDEFER:
Если полетела именно таблица разделов, а не файловые системы, то в поиске начал разделов могут помочь примерно следующие команды:
# chmod a+r /dev/hda
$ for i in `seq 0 24321`; do \
echo -n "$i: "; dd if=/dev/hda bs=8225280 count=1 skip="$i" 2>/dev/null | file -; \
done | grep -E "(XFS)|(ext[23])"
Где 24321 вы должны заменить на количество цилиндров в своём винте. А 8225280 на размер цилиндра на своём винте.
Их можно узнать командой:
# sfdisk -l /dev/hda | head -n3 Disk /dev/hda: 24321 cylinders, 255 heads, 63 sectors/track Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0
Для примера, вот что выдаёт sfdisk для hda2
# sfdisk -l /dev/hda | grep -E "(Device)|(hda2)" Device Boot Start End #cyls #blocks Id System /dev/hda2 2432 2443 12 96390 83 Linux
И мы можем убедиться, что та команда его найдёт:
$ for i in `seq 2432 2432`; do \
echo -n "$i: "; dd if=/dev/hda bs=8225280 count=1 skip="$i" 2>/dev/null | file -;
done | grep -E "(XFS)|(ext[23])"
2432: /dev/stdin: Linux rev 1.0 ext3 filesystem data (needs journal recovery)
Т.е. команда правильно находит Start'ы -- а end'ы вы и сами расчитаете ;-)
В конце не забудьте
# chmod o-r /dev/hda
[править] Для тех кто понимает, что делает (watashiwa_daredeska)
рекомендации watashiwa_daredeska:
SCRIPT START -----
- !/bin/sh
CN=10011 # Число цилиндров на винте. Можно посмотреть в fdisk HN=255 # Число головок. Там же. SN=63 # Число секторов. Там же. DEV=/dev/hda # Девайс, на котором ищем.
for c in `seq $CN`; do
SKIP=`dc -e "$HN $SN 512 ** $c 1 - * 510 + p"` n=`dd if=$DEV bs=1 count=2 skip=$SKIP 2>/dev/null` test "$n" = $'\x55\xaa' && echo $c
done
SCRIPT END -----
На выходе номера цилиндров, которые надо вписывать в fdisk. У меня правильно нашёл все разделы и ни одного лишнего, хотя это возможно.
[править] Проверил ext3 с помощью e2fsck на разделе, смонтированном на запись. Утилита нашла кучу ошибок и вроде как их исправила. Когда я зашел на диск, оказалось, что половины файлов нет, у папок поменялись названия и т.п. Как все исправить?
Долго исправлялось? Тогда уже, наверно, никак. Можно глянуть предыдущий вопрос, может что выйдет.
[править] Как подмонтировать одну директорию к другой?
Для Linux:
root@linux# mount --bind src_dir dest_dir
Для FreeBSD:
root@freebsd# mount -t union src_dir dest_dir
Размонтировать соответственно можно комадной
root@linux# umount dest_dir
[править] Как создать жесткую ссылку на директорию?
Согласно man ln можно:
В существующих реализациях, если команда ln может создавать жесткую ссылку на каталог, то она может это делать только от лица суперпользователя. POSIX запрещает системному вызову link(2) и утилите ln создавать жесткие ссылки на каталоги (но не запрещает создавать жесткие ссылки на файлы, которые находятся на других файловых системах).
Директории также можно примонтировать одну к другой).
[править] Чем проверить жесткие диски на наличие плохих секторов (badblocks)?
В состав e2fsprogs входит программа badblocks. Можно сразу использовать ее. И есть специальный скрипт, написанный под эту программу.
[править] Как пометить плохой сектор на жестком диске?
Запустить программу проверки fsck с ключом -c.
Внимание! Никогда, ни при каких обстоятельствах, не проверяйте смонтированные разделы!
[править] Как сделать так, чтобы при подключении нового винта система автоматически его монтировала?
Воспользоваться скриптом hdmount проекта Алхимия (я, jackill, им сам пользуюсь и уже давно).