Вы здесь

Windows7 убивает Grub.

Привет всем!

Обнаружил странный косяк совместной жизни Windows7 и Gentoo.
Исходный расклад такой. Есть флешка 32 Gb. Поделена на 4 раздела:
1. 16 Gb. FAT32, не загрузочный, обычная файлопомойка
2. Оставшиеся 16 gb полноценная(не LiveCD/USB) инсталляция Gentoo
- 100 Mb. ext2, загрузочный, монтируется как boot
- 512 Mb. swap
- 15,3 Gb. ReiserFS, монтируется как root
В такой конфигурации Windows как и положено видит только FAT32 раздел.
Gentoo прекрасно работает, но стоит флешку воткнуть в Windows 7 и сделать безобидную операцию (например копирование файла на FAT32 раздел) и всё, пипец, после этого GRUB мертв. При попытке загрузится максимум на что его хватает - написать "GRUB". Лечится только переустановкой GRUB.
Убивается только GRUB, сами разделы не тронуты. Погуглив нашел https://ubuntu.opentomsk.net/news/siryorik/3093/ и http://otvet.mail.ru/question/63239020/, но у меня grub v0.97, а не grub2, и симптом появляется даже если не запускать программы с флешки, а проводить простые файловые операции.

Гуру, есть идеи?

Попробуйте скопировать файлы grub на первый раздел, только ссылка menu.list не скопируется, придётся копировать файл grub.conf в menu.list.

После чего переставьте grub с указанием его корневого раздела (где лежат файлы) первого раздела флешки.

К сожалению, если fat32 будет не первым разделом его не увидит win7. Я уже проводил такие эксперименты, win7 категорически не желает работать с разделами кроме первого. Поэтому ваш совет, к сожалению, разрушает всю концепцию.

Почему разрушает, если вы хотите скрыть файлы linux от windows, то они в этом случае также будут скрыты, единственно что я вам предлагаю, так это переместить файлы загрузчика на первый раздел, он же в вас FAT32 и посмотреть, какие изменения будут происходить с загрузчиком, но скорее всего всё будет впорядке.

Загрузочный раздел Linux на fat32. Интересная идея. Надо попробовать...

К сожалению, если fat32 будет не первым разделом его не увидит win7.

вывод diskpart и mountvol с винды фстудию

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

mda969 написал:
Gentoo прекрасно работает, но стоит флешку воткнуть в Windows 7 и сделать безобидную операцию (например копирование файла на FAT32 раздел) и всё, пипец, после этого GRUB мертв. При попытке загрузится максимум на что его хватает - написать "GRUB". Лечится только переустановкой GRUB.
Убивается только GRUB, сами разделы не тронуты. Погуглив нашел https://ubuntu.opentomsk.net/news/siryorik/3093/ и http://otvet.mail.ru/question/63239020/, но у меня grub v0.97, а не grub2, и симптом появляется даже если не запускать программы с флешки, а проводить простые файловые операции.

Гуру, есть идеи?

Обратиться в службу поддежки фирмы майкрософт (я серьёзно).

:wq
--
Live free or die

Пипец! Валидолу! Win7 беспредельничает с разделами. При попытке отформатировать 16 гб fat32-раздел через консоль управления, win7 снесла все остальные разделы. Причем после "акции" форматирования итоговый размер fat32 раздела сначала стал 32 Гб, но стоило флешку вытащить и воткнуть он опять стал определяться 16Гб, а вот остальных разделов и след простыл. Все используемые менеджеры разделов показывают оставшиеся 16 гб как неразмеченные. Да уж, это явно какой-то дикий виндусовый косяк! Похоже винда выжигает вокруг себя всё по периметру :)

------------
to slepnoga. Увы, уже не смогу ни diskpart, ни mountvol предоставить фстудию

------------
to Anarchist

Вряд ли буду обращаться в службу поддержки майкрософт, не стоит оно того. Похоже, что концепция (из-за косяков имярек) оказалась нежизнеспособна. Ну что ж придумаем другую.

Спасибо всем. Тема закрыта.

Зачем вы форматировали раздел ???

На самом деле ещё не всё потеряно, вот скрипт, он будет пытаться смонтировать файловую систему корневого раздела с gentoo, который был у вас на флешке:

#!/usr/bin/perl -w
for ($sector = 0; ; $sector++)
{
$offset = $sector * 512;
$cmd = "mount /dev/sdb /mnt/tmp -t reiserfs -o ro,offset=$offset";
`$cmd`;
print "sector: $sector offset: $offset\n";
die "partition found @ offset $offset!" if ($? == 0);
}

Скрипт будет перебирать секторы флешки до тех пор, пока не найдёт начало раздела с reiserfs.

Только начало лучше не с 0 указывать "$sector = 0;", а указать чуть меньше половины объёмя флешки, здесь нужно указать номер начального сектора, с которого начинать поиск суперблока reiserfs.

Число секторов можно посмотреть в выводе fdisk -l /dev/sdX, где sdX - флешка.

Затем вы сможете создать новую запись в таблице разделов флешки с указанием границ раздела с reiserfs, номер начального сектора print "sector: $sector

mda969 написал:
Win7 беспредельничает с разделами. При попытке отформатировать 16 гб fat32-раздел через консоль управления, win7 снесла все остальные разделы. Причем после "акции" форматирования итоговый размер fat32 раздела сначала стал 32 Гб, но стоило флешку вытащить и воткнуть он опять стал определяться 16Гб, а вот остальных разделов и след простыл. Все используемые менеджеры разделов показывают оставшиеся 16 гб как неразмеченные. Да уж, это явно какой-то дикий виндусовый косяк! Похоже винда выжигает вокруг себя всё по периметру :)
...
Вряд ли буду обращаться в службу поддержки майкрософт, не стоит оно того. Похоже, что концепция (из-за косяков имярек) оказалась нежизнеспособна. Ну что ж придумаем другую.

Именно поэтому практически необходимо разрушить моск службе поддержки фирмы майкрософт (семёрочку же тебе впарили в комплекте?).

:wq
--
Live free or die

Времени на это жалко. С учетом что задача была эксперементальной и я не потерял данные можно и плюнуть. Опять же, для того, что бы вступать в "прения" нужно флешку оставить в "раскосяченом" состоянии, а она нужна. Так что, бог им судья, ниже мнение было озвучено, что это не косяк, а "заложенная функциональность" :)

Поддержка ответит что-нибудь типа "см. ересь № такая-то". Потому таки не стоит обращаться в поддержку. Так что, скорее всего, никаких прений не будет.

>Гуру, есть идеи?
Как вариант: не смешивать воду с вином и держать в хозяйстве две флешки.

Увы, это не косяк винды, а сознательно заложенная функциональность. Так будет происходить со всеми флешками с идентификатором "Сменное устройство".
Тебе нужна флешка с идентификатором "usb hdd". Тогда нормально будут видеться разделы и не будет проблем. В ином случае винда считает, что на флешке должен быть только один раздел и т.д. и т.п.

Смутно подозревал о чем-то подобном. Просто проявления подобного рода "заложенной функциональности" какие-то дикие. Есть ли универсальные способы на обычной флешке поменять индикатор на "usb hdd"? Я знаю только один, подмена драйверов флешки, на драйвера жеского диска в win. Он мне не подходит из-за осбенностей использования флешки.

1. Перепрошивка контроллера флешки. Говорят на некоторых можно поменять без этого, но утилита для этого у меня не сработала.
2. Искать "правильную" флешку.
3. Забить на флешку и использовать внешний hdd. Там идентификаторы "правильные" (точнее других не видел).
4. Завести несколько флешек.

Что то я сомневаюсь, что проблема в том, что windows "хочет" один раздел на флешке.

Но есть возможность обойти и эту ситуацию, в случае, если ТС поместит файлы загрузчика и образ ядра c initrd на первый раздел с FAT32.

Что я предлагаю:
Команда mount может монтировать файловую систему на разделе или диске, в этом случае суперблок (начало) файловой системы ищется с начала диска или раздела, но так же можно монтировать и с помощью опции "offset=XXX", я указал выше скрипт, где это реализовано.

Поэтому на флешке можно оставить один раздел с FAT32, не на весь объём, к примеру на половину., создать ещё один раздел, отформатировать его в reiserfs к примеру, поставить на него gentoo., затем запомнить номер сектора, с которого начинается раздел на флешке и удалить раздел.

Для такого монтирования придётся сделать свой initrd и написать свой скрипт Init, в котором указать поиск первого раздела (FAT32) по UUID или метке, затем отбрасываем последний символ (1) с индексом раздела, получаем имя устройства флешки, дальше монтируем корень и переходим в него.

Вот эту функцию для поиска раздела по метке нужно переработать:

uuidlabel_root() {
    for cmd in $(cat /proc/cmdline) ; do
        case $cmd in
        root=*)
            type=$(echo $cmd | cut -d= -f2)
            if [ $type == "LABEL" ] || [ $type == "UUID" ] ; then
                uuid=$(echo $cmd | cut -d= -f3)
                a=$(findfs "$type"="$uuid")
                ROOT=${a:8}
                mount -o offset=XXX,ro $ROOT /mnt/root
            else
                mount -o ro $(echo $cmd | cut -d= -f2) /mnt/root
            fi
            ;;
        esac
    done
}

В /etc/fstab предварительно нужно поместить такую запись:

/dev/sdX   /   reiserfs offset=XXX,rw 0 0

Где XXX - смещение относительно начала диска.
sdX на разных ПК может быть разным, его определяем выше.

Правим /etc/fstab на смонтированном корневом разделе с указанием нового размещения корневого раздела:

mv /fstab /mnt/root/etc/fstab
echo -e "\n/dev/$ROOOT\t/\t\treiserfs\t\toffset=XXX,rw\t0 0\n" >> /mnt/root/etc/fstab

Значение $ROOT (имя устройства флешки) определяется выше, значение offset статично и известно вам.

Файл /fstab пустой, только с заголовком, предварительно лежит в initrd.

И собственно осуществляем переход в систему (смену корня):

# Clean up.
umount /proc
umount /sys

# Boot the real thing.
exec switch_root /mnt/root /sbin/init -c /dev/tty1

Если не совсем понятно, что я написал, поясню, по возможности, графически:

[mbr] [   partition1 FAT32  ] [  unallocated disk space  ]
...
[mbr] [  grub,kernel,initrd ] [  root filesystem gentoo  ]
...
[mbr] [  grub,kernel,initrd ] [     mount offset fs      ]
...
[         offset            ] [  root filesystem gentoo  ]

Так для windows будет "казаться", хотя так и будет на самом деле, что на флешке один раздел и не размеченная область, в которой находится корневая файловая система gentoo.

Вот более подробно про создание своего initrd: http://en.gentoo-wiki.com/wiki/Initramfs

Гуру, есть идеи?

Я не гуру, я скромный MCP , и у меня все работает ; без версии семерки и приведенных команд далнейшие разборки напоминают бред виндузятника об ipset$+&iptables ( как пример), только отличны по знаку ;)

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

У меня тоже, сейчас воткнул в семёрку (специально нашёл!) флэшку с двумя разделами и после этого загрузился.

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.