LINUX.ORG.RU

Непонятная проблема с кодировками монтирования ext2


0

0

Есть Gentoo Linux, кодировки всюду UTF-8, вся работа с русским всюду корректна.

Есть старый винт с ext2 или ext3 (кстати, как отличить одно от другого?), созданный под RedHat Linux 7.3

На нём - файлы с русскими именами. Скорее всего - KOI8-R.

Так вот, с простым монтированием по mount всё ок. Только вместо русского - знаки вопроса. При монтировании с любыми комбинациями опций типа iocharset=koi8-r или codepage=koi8-r - классическое сообщение "mount: wrong fs type, bad option, bad superblock on /dev/sda1, or too many mounted file systems".

В системе koi8 есть. Ядро с поддержкой NLS.

Куда копать? До файлов с русским нужно добраться... :-/

★★★★★

iocharset для ехт2,3 не работает. Надо конвертировать имена из кои в утф. Есть для етого програмулина, тока названия не помню.

Dim_2
()
Ответ на: комментарий от Dim_2

Спасибо за наводку.

Воспользовался переимеованием таким образом (оказалось, кстати, что файлы вообще в cp866 оказались!):

find .|sort|while read i; do n=`echo "$i"|iconv -f cp866 -t utf8`; [ "$i" = "$n" ] || mv "$i" "$n" ; done

Всё бы хорошо. Имена получаются правильные всюду, всё корректно. Но! Значительную часть исходных файлов команда mv просто не видит!

"mv: невозможно выполнить stat для `./zstr/\342\247 \250 \250\253\253\356\341\342\340/Thumbs.db': No such file or directory"

При чём логику этого пока не вижу - часть же файлов переименовывает корректно! Если вместо "mv" вписать "echo" - то итоговые имена все корректные :-/

Может, кто-то подскажет, куда дальше копать?

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Блин, понял.

Если сперва переименовывать каталог (как у меня), то он не находит потом файлы из него.

Если сперва переименовывать файлы, то он не находит каталог (он же уже переименованный!) куда их класть.

Т.е. придётся думать на тему find . -d ... for ...

KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от KRoN73

Уф! Вот такое вот работает:

find . -type d|sort -r|while read d; do pushd "$d"; for f in *; do n=`echo "$f"|iconv -f cp866 -t utf8`; [ "$f" == "$n" ] || mv "$f" "$n" ; done; popd; done;

Так что, если кому нужно, готовое решение :)

KRoN73 ★★★★★
() автор топика

>При монтировании с любыми комбинациями опций типа iocharset=koi8-r или codepage=koi8-r - классическое сообщение "mount: wrong fs type, bad option, bad superblock on /dev/sda1, or too many mounted file systems".

Обычно после этого, хорошо бы в dmesg глянуть за подробностями.

Selecter ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

К счастью, симлинков там не было :) Это бывшая samba-файлопомойка.

...

convmv - да, посмотрел, наверное, то, что было нужно. На будущее буду знать :)

KRoN73 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.