Можно записывать диск из консоли, можно воспользоваться программой с графическим интерфейсом. Во втором случае обычно используются программы 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
- там хорошее и подробное описание с объяснением команд.
Проверить качество записи можно несколькими способами.
Нужно для ядер версий 2.4.х и ниже. НЕ НУЖНО для ядер версий 2.6.х.х.
Чтобы mkisofs сохраняя структуру, например, папки images и htmls, выполните:
user@linux$ mkisofs -v -J -r -graft-points images=~/images htmls=~/htmls | cdrecord ...
В 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.
Воспользоваться командой 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 тоже способны снимать имиджи.
О монтировании образов читайте следующий вопрос.
Есть два способа - один простой, другой чуть сложнее :)
Для обоих в ядре нужна поддержка loopback
root@linux# mount -o loop -t fstype x.img /mnt/x
смонтирует образ x.img с файловой системой fstype в директорию /mnt/x.
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
понятие относительное, потому что в .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
Создаем файл нужного размера, делаем на нем файловую систему и монтируем ее в каталог:
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.
Для надежности можно выставить скорость чтения с CD-ROM поменьше.
user@linux# dd if=/dev/cdrom of=/dev/null
Если все скопируется, значит все в порядке.
И можно воспользоваться специальной программой.
Если это 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
В любой дистрибутив входит программа fdisk. После создания раздела нужно создать файловую систему (то, что в MS Windows называется "отформатировать"). Делается это с помощью программы mkfs.*
Вместо * идет название файловой системы. Например:
mkfs.ext3
mkfs.vfat
mkfs.reiserfs
Обычно мучаются при переходе с 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
Способ первый, хороший:
#!/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;
}
Запускаем mc, выбираем все файлы, жмем F6 и в поле указываем \L*
и все наши имена файлов приведуться в нижний регистр.
Если просто в консоли, то можно сделать в одну строку следущее
find /<твой путь> -print | while read x ; do mv $x $(echo $x | tr 'A-Z' 'a-z'); done
Для 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
Зайдите сюда - http://p-nand-q.com/download/rfstool.html
Plug-in под TotalCommander для ext2/3 и reiserfs - http://www.ghisler.com/plugins.htm
В /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.
Добавить в /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.
В данном случае noexec не поможет, добавьте в /etc/fstab параметр showexec
Посмотреть как этот раздел прописан у вас в fstab - не хватает параметра quiet. Пример строчки здесь.
Прописываем в /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 с этого сайта лежит здесь (внимание, оно довольно старое).
Собираем ядро с поддержкой ext3. Если ext2 была жестко вкомпилена в ядро (т.е. не модулем и вы не пользуетесь initrd), то так же собираем ext3.
Грузимся, в /etc/fstab пишем вместо ext2 ext3. Затем перегружаемся и грузимся с компашки (можем не перегружаться и просто смонтировать систему в read only) и даем команду вроде этой:
root@linux# tune2fs -j /dev/hda1
(hda1 - меняете на свой раздел). Перегружаемся. Если все работает, собираем ядро без поддержки ext2 - она не нужна.
Штатными средствами - никак. Файловые системы написаны без учета друг друга и поэтому в отличие от fat и ntfs не имеют общих корней. Тем не менее способ есть. Точнее есть утилита, которую вы можете использовать на свой страх и риск.
convertfs - http://members.optusnet.com.au/clausen/ideas/convertfs.txt
Утилита входит в состав Debian и порты gentoo. LVM тоже поддерживается.
Если хочется безопасного конвертирования, то лучше взять tar (а лучше cpio), забэкапить весь раздел и сделать новую файловую систему, после чего скопировать все обратно из архива.
Если кто-то узнает информацию о переходе с reiserfs3 на reiserfs4, пишите.
За дополнение ответа благодарим argin.
Можно почитать об это здесь
И попробовать утилиту testdisk
Попробовать утилиту gpart. Пользуйтесь очень осторожно.
Долго исправлялось? Тогда уже, наверно, никак. Можно глянуть предыдущий вопрос, может что выйдет.
Для 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 создавать жесткие ссылки на каталоги (но не запрещает создавать жесткие ссылки на файлы, которые находятся на других файловых системах).
Директории также можно примонтировать одну к другой).
В состав e2fsprogs входит программа badblocks. Можно сразу использовать ее. И есть специальный скрипт, написанный под эту программу.
Запустить программу проверки fsck с ключом -c.
Внимание! Никогда, ни при каких обстоятельствах, не проверяйте смонтированные разделы!
Воспользоваться скриптом hdmount проекта Алхимия (я, jackill, им сам пользуюсь и уже давно).
Файловые unix-системы практически не подвержены фрагментации из-за особенностей своего строения. Фрагментация обычно не превышает 1.5-2 процентов. Вот хорошая цитата на эту тему:
You don't need to defragment Linux filesystems. Not ext3, not ReiserFS. Defragmentation is only a conce
Поэтому с дефрагментаторами тоже туго. Был какой-то defrag, но поверьте, вам не нужны такие утилиты.
Когда работа ведется с большими файлами, рекомендуется использовать xfs. Для множества мелких - reiserfs. Наиболее надежной является ext3.
Корректно писать и читать в обоих операционных системах можно либо на ext2, либо на fat32 (vfat).
Плюс из MS Windows можно увидеть данные с reiserfs, а из Linux можно увидеть данные с NTFS.