Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Что нужно помнить о файловой системы в Linux (FAQ)

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> Файловая система
 
Автор Сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Пт Dec 22, 2006 8:34 am    Заголовок сообщения: Что нужно помнить о файловой системы в Linux (FAQ)
Ответить с цитатой

Нашел очень толковый FAQ, выкладываю

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

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

Как сделать, чтобы 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)?

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

Для обоих в ядре нужна поддержка 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.

Для надежности можно выставить скорость чтения с 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 Sad

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

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 {} \Wink

#!/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"

Как посмотреть раздел 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,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. Не говорите, что не предупреждал. Существует три способа:
Собрать ядро с поддержкой записи на NTFS. На ядрах 2.4.x запись возможна только на NTFS от NT4.0, на ядрах 2.6 на любой NTFS. Однако есть одно но: вы можете писать в уже созданный файл (т.е. изменять его). Вы не сможете создать новый файл!
Вы можете купить (или найти в какой-нибудь p2p сети) 'Paragon NTFS driver for linux'. Сайт компании: http://www.ntfs-linux.com Наилучший способ. Стоит все удовольствие $70. Одна маленькая неприятность - не работает с ядрами серии 2.6.х
Продукт обратной разработки под названием captive. Позволяет читать и писать на NTFS. Недостаток: он медленно пишет и ему нужна пара файлов из MS Windows (причем один из них - драйвер NTFS). http://www.jankratochvil.net/project/captive

Как перейти с 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:

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

# 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'ы вы и сами расчитаете Wink

В конце не забудьте

# chmod o-r /dev/hda

Проверил 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, им сам пользуюсь и уже давно).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> Файловая система Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис