PDA

Bekijk de volledige versie : Общие вопросы - иерархия каталогов



bigest
22-11-2007, 13:31
Приветствую!

Хочу прежде всего поблагодарить Олега и сообщество за проделанную работу. Получился отличный продукт, а форум полон готовых рецептов, которые, в большинстве своем, работают и использовать которые может каждый.

Однако мне очень хочется понять ПОЧЕМУ оно работает и делает это именно так, как делает. Обложился книжками по линуксу и курю man - это помогает решать текущие задачи, однако фундаментальные понятия даются с трудом.

В тупик ставит вложенная иерархия каталогов. Никак не могу постичь суть.
Скажем, каталог etc существует по книжкам в видах:
/etc
/usr/etc
/usr/local/etc
На деле, к этим трем местам добавляются еще несколько:
/tmp/etc
/opt/etc

В чем кардинальное различие? Где мне хранить свои конфиги? Если нужно отредактировать уже существующий, какой из них?

Дополнительно ситуация осложняется флешем, на котором находится часть корневого каталога, про который точно ни одна книжка не расскажет. В какие каталоги запрещена запись? Какие теряют свое содержимое при перезагрузке?

В голове каша! :( Когда вижу ipkg.conf одновременно в /usr/etc, /tmp/etc (который еще вдобавок /etc) и /opt/etc, опускаются руки и возникает острое желание побиться головой об стену. :(

Посоветуйте, пожалуйста, что-нибудь.

al37919
22-11-2007, 13:43
В данном устройстве используется не совсем стандартная иерархия.

Основные особенности такие:

/ (т..е root) существует на встроенной флашке и является read only

/tmp живет в оперативной памяти и разворачивается туда с флашки при каждой загрузке.

/usr/local живет тоже на встроенной флашке, однако туда можно записывать что-то. Кроме того, можно сохранять файлы лежащие в /tmp, но для сохранения нужно прописать путь к измененным файлам в файл /usr/local/.files
/etc и /var являются симлинками и по сути живут тоже в /tmp, т.е. при определенных условиях туда можно сохранять. Максимальный объем этой ф.с. (/usr/local) --- 64кб. Для сохранения этих изменений нужно выполнять flashfs save && flashfs commit && flashfs enable

/opt это аналог /usr в классическом понимании. В эту точку монтируется внешний носитель на который устанавливаются дополнительные приложения.

P.S. Конфиги внешних программ установленных через ipkg хранятся в /opt/etc
Насчет остальных путей можно сказать следующее в /usr/etc записать ничего нельзя, т.к. read only
Для хранения конфигов модифицированных компонентов входящих в состав firmware остается:
/etc=/tmp/etc и /usr/local/etc (и тут уж надо смотреть по конкретному приложению где оно сможет свой конфиг найти)
Впрочем, не стоит сильно голову этим забивать. В основном придется пользоваться /opt/etc

bigest
23-11-2007, 10:58
Не забивать голову - не мой подход. Не могу доверять вещам, которые живут своей жизнью и функционирование которых мне непонятно. ;)

С иерархией освоился. Теперь процесс загрузки/выгрузки.

Есть файлики post-boot, post-firewall, post-mount которые запускаются в определенные моменты загрузки. Какой скрипт их вызывает?

Что происходит в системе после ввода команды reboot?

В /opt/etc/init.d кладется скрипт rc.unslung для прогона установленных пакетов с командой start. Удобно добавить его в post-mount, чтобы сервисы стартовали автоматически. Не нужно ли создать и добавить обратный скрипт в pre-shutdown?

А может добавить туда же unmount для всех использовавшихся разделов? Добавить swapoff?

Как вообще максимально правильно и нежно завершить работу перед перезагрузкой, чтобы файловую систему не покарежить?

К чему эти вопросы... Сделал reboot во время работающего enhanced-ctorrent - в сислоге стали появляться время от времени ошибки вида:

Nov 23 05:45:54 kernel: SCSI disk error : host 0 channel 0 id 0 lun 0 return code = 8000002
Nov 23 05:45:54 kernel: Current sd08:01: sns = 70 4
Nov 23 05:45:54 kernel: ASC=4b ASCQ= 0
Nov 23 05:45:54 kernel: Raw sense data:0x70 0x00 0x04 0x00 0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0x00 0x4b 0x00 0x00 0x00 0x00 0x00
Nov 23 05:45:54 kernel: I/O error: dev 08:01, sector 184464


Прогнал fsck - нашел ошибки:

[bigest@outpost root]$ fsck.ext3 -v -c /dev/discs/disc0/part2
e2fsck 1.40.2 (12-Jul-2007)
ext2fs_check_if_mount: No such file or directory while determining whether /dev/discs/disc0/part2 is mounted.
Checking for bad blocks (read-only test): done
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences: -66030 -(66039--66040) -(66042--66045) -70801 -(70803--70807) +(70825--70832)
Fix<y>? yes

Free blocks count wrong for group #2 (31544, counted=31549).
Fix<y>? yes

Free blocks count wrong (230631, counted=230636).
Fix<y>? yes


/dev/discs/disc0/part2: ***** FILE SYSTEM WAS MODIFIED *****

6900 inodes used (5.49%)
15 non-contiguous inodes (0.2%)
# of inodes with ind/dind/tind blocks: 95/0/0
20379 blocks used (8.12%)
0 bad blocks
0 large files

5624 regular files
168 directories
0 character device files
0 block device files
0 fifos
7 links
1099 symbolic links (1099 fast symbolic links)
0 sockets
--------
6898 files

Кроме того, fd стал выдавать следующее:

Filesystem 1k-blocks Used Available Use% Mounted on
/dev/root 3008 3008 0 100% /
/dev/discs/disc0/part2 77665220 13188376 60531684 18% /tmp/harddisk
df: /tmp/harddisk/part1: No such file or directory
/dev/discs/disc0/part2 988244 65708 872336 7% /opt
/dev/discs/disc0/part3 77665220 13188380 60531680 18% /tmp/harddisk


Диск при этом разбит так:

[bigest@outpost root]$ fdisk -l

Disk /dev/scsi/host0/bus0/target0/lun0/disc: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/scsi/host0/bus0/target0/lun0/part1 1 63 506016 82 Linux swap
/dev/scsi/host0/bus0/target0/lun0/part2 64 188 1004062+ 83 Linux
/dev/scsi/host0/bus0/target0/lun0/part3 189 10011 78903247+ 83 Linux


Что искал df в /tmp/harddisk/part1? :-/

bigest
24-11-2007, 08:17
С df разобрался - я, дурень эдакий, запихнул команды монтирования разделов в post-mount! :D
Остальные вопросы в силе.

Oleg
24-11-2007, 08:20
Какие из них в силе?
В /usr/etc лежит образ того, что при загрузке помещается в /etc.