LINUX.ORG.RU

Почему запускается произвольный раздел с Linux?

 , ,


0

2

Для некоторых экспериментов с Debian с целью экономии времени создал 1-й общий загрузочный раздел (т.е. в котором и /boot, и /root и все остальное), а с него с помощью parted сделал резервный 2-й раздел, т.е. идентичный клон.
Итого два одинаковых раздела - учебно-тренировочный и резервный.

Тренируюсь «на кошечках» на 1-м разделе, и если что-то в нем пошло не так, тем же parted быстренько восстанавливаю его из 2-го раздела.

Все в этой схеме работает как надо, кроме одного:
- оказалось, что иногда запускается 1-й раздел, а иногда 2-й, что лишает всего смысла экспериментов.

Причину не понял, но попытался избежать этой непредсказуемости запусков, отодвинув 2-й раздел в самый конец диска, чтобы загрузчик его «не достал» - увы, не помогло.

Тогда дополнительно поместил 2-й раздел во внутрь Extended раздела - то же не сработало.

Откуда же берется эта непредсказуемость запуска, и как ее предотвратить?

★★★★★

Ответ на: комментарий от Aceler

Да, я тоже так подумал, но все равно непонятно:
- если я поменяю UUID на резервном разделе, то какой из этих двух разделов будет грузиться?


Вот, например, имеем:

UUID=fd28e86b-dea8d-8431-b351-111111111111  /  ext4 errors=remount-ro 0 1

Меняем его на 2-м разделе на
UUID=fd28e86b-dea8d-8431-b351-222222222222  /  ext4 errors=remount-ro 0 1

и тогда будет всегда грузиться 1-й раздел, потому что он правильно прописан в fstab, верно?

Ок, потом копируем 2-й раздел с подкорректированным UUID на место 1-го.
Но в этом случае не будет грузиться ни один раздел, имхо.

И как быть - грузится с LiveCD и править UUID на 1-м разделе?

Если так, то это слишком много возни на мой взгляд. Может есть путь попроще?

chukcha ★★★★★
() автор топика
Последнее исправление: chukcha (всего исправлений: 2)
Ответ на: комментарий от chukcha

и тогда будет всегда грузиться 1-й раздел, потому что он правильно прописан в fstab, верно?

Да.

Ок, потом копируем 2-й раздел с подкорректированным UUID на место 1-го. Но в этом случае не будет грузиться ни один раздел, имхо.

Да.

Если так, то это слишком много возни на мой взгляд. Может есть путь попроще?

Есть способ указать в fstab не UUID, а метку раздела или устройство. Метку поменять проще, чем UUID.

Например, задать через tune2fs метку основного раздела main, а дополнительного reserve. В fstab вписать

LABEL=main /  ext4 errors=remount-ro 0 1

При копировании резервного раздела на основной надо будет не забывать поправить метку.

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

Есть способ указать в fstab не UUID, а метку раздела или устройство.

В смысле обычную метку раздела, которую можно поменять с помощью того же parted, которым же и копирую раздел?
Тогда да, это совсем просто, причем даже в едином цикле клонирования.

Спасибо, попробую всенепременно! :=)

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

Я бы, наверное, два раза подумал над советами с fstab.

Мне кажется, что параметр ядра root и указание в нём любым доступным способом уникального правильного раздела выглядит убедительнее.

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

Мне кажется, что параметр ядра root и указание в нём любым доступным способом уникального правильного раздела выглядит убедительнее.

Этот вариант мне тоже понравился. Хотя бы тем, что ничего не нужно редактировать, достаточно при загрузке выбрать «e» и слегка подкорректировав, выбрать нужный UUID.

Правда, здесь нужно быть очень внимательным, чтобы вместо основного раздела не запустить резервный.
И чтобы не путаться, в fstab вместо

UUID=fd28e86b-dea8d-8431-b351-111111111111  /  ext4 errors=remount-ro 0 1
использовал старый добрый способ - поменял UUID указал конкретный раздел -
/dev/sda1   /    ext4    errors=remount-ro    0 1
а резервный соответственно на
/dev/sda2   /    ext4    errors=remount-ro    0 1

Теперь sda1 успешно грузится.
Однако каково же было мое удивление, когда при старте зашел по «e» и увидел, что млядский UUID никуда не делся.

Какая-то. извините, херня в этом Grub2. В Grub1 все было невероятно просто, понятно и без проблем.

До сих пор не могу понять, какие преимущества дал этот новейший Gruba2 по сравнению с предыдущим.
Кто-то может пояснить?

И как теперь надежно решать проблему с запуском 1-го раздела?

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

старый добрый способ - поменял UUID указал конкретный раздел

Можно и каноническое имя устройства (sda1), если диск всего один. Тогда и в конфиге груба можно писать «sda1».

удивление, когда при старте зашел по «e» и увидел, что млядский UUID никуда не делся…

…потому что, это только на одну конкретную сессию. В конфиге это не сохраняется. Удобно для экспериментов-отладки.

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

Этот вариант мне тоже понравился.

Я пытался сказать, что это не «вариант», а единственно верный способ.

Как по вашему будет выбираться root из файла, который уже лежит на этом самом root ? Чтобы добраться до /etc/fstab - он уже должен быть известен где лежит, нет?

Если вам не нужны особые опции монтирования root - он в fstab вообще не нужен.

'e' - это просто однократное редактирование запуска.

GRUB не пользуюсь. При современных UEFI и ядрах Linux - вообще не нужны никакие дополнительные загрузчики по большому счету. Но я пользуюсь systemd-boot

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

Я уже окончательно запутался с этим гребаным грабом-2 ... :-(

Когда смотришь в /etc/default/grub, то там все просто и лаконично:

GRUB_DEFAULT=0
GRUB_TIMEOUT=300
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="
- всего 5 скромных и понятных строк.

но когда смотришь в /boot/grub/grub.cfg, то охренеть - там наворочено аж 233 строки!!! :-O
И чего там только нет, даже несуществующие флопаки приплели!

Зачем это все?? Я не понимаю ни смысла этого нагромождения кодов, ни их назначение, и лень разбираться в этом bloatware месиве. Зато нашел несколько статей, в которых разгневанные юзеры выкидывают всею эту хрень, оставляя только необходимый минимум.

------------------
Возвращаясь к сабжу.
Да, диск всего один, sda.
Приходится использовать обычный классический BIOS, не то если еще полезу разбираться с UEFI, то крыша вообще съедет набекрень.

Подытоживая - так как наиболее простым способом решить задачу предсказуемого запуска раздела?
Поскольку окончательно запутался, прошу расписать подробнее..

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

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

После копирования резервной копии ты должен вернуть в восстановленном разделе старый uuid. Это просто, просто подумай головой, прежде чем писать сообщения на форум.

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

mount --bind /emptydir $DIR/$UPPER

#!/bin/sh
mount -t overlay -o lowerdir=/,upperdir=$UPPER/upper,workdir=$UPPER/work overlayfs $DIR

mount --bind /emptydir $DIR/$UPPER

mount --rbind /etc/portage/ $DIR/etc/portage/
mount --rbind /var/cache/binpkgs/ $DIR/var/cache/binpkgs/
mount --rbind /var/cache/distfiles/ $DIR/var/cache/distfiles/
mount --rbind /var/db/repos/ $DIR/var/db/repos/
mount --rbind /usr/src_overlay/ $DIR/usr/src_overlay/

mount -t proc proc $DIR/proc/
mount --rbind /sys $DIR/sys/
mount --rbind /dev $DIR/dev/

mount --rbind /run $DIR/run/
mount --rbind /tmp $DIR/tmp/

mount --make-rslave $DIR/proc/
mount --make-rslave $DIR/sys/
mount --make-rslave $DIR/dev/

#mount --make-rslave $DIR/run/
#mount --make-rslave $DIR/tmp/

mount --types tmpfs --options nosuid,nodev,noexec shm $DIR/dev/shm
chmod 1777 /dev/shm $DIR/run/shm

naKovoNapalBaran
()
Последнее исправление: naKovoNapalBaran (всего исправлений: 1)
Ответ на: комментарий от chukcha

Просто, за кажущейся простотой клонирования раздела, ты не увидел всех возникающих сложностей-ограничений.

Простой вариант. Два раздела. На первом установлена система. С первого раздела на второй просто копируешь файлы. В груб создаешь два пункта меню: запуск первой системы, запуск второй системы. Все.

Сломал первую систему, запустил вторую, из нее починил первую или скопировал файлы со второго раздела на первый.

Я делаю так.

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

Просто, за кажущейся простотой клонирования раздела, ты не увидел всех возникающих сложностей-ограничений.

Уже увидел :-(

С первого раздела на второй просто копируешь файлы.

Копировать? Не, это не катит, потому что пофайловое копирование может не передать ВСЕХ атрибутов файлов и каталогов, и полностью идентичной копии не получится. Да и очень долго это - пофайловое копирование множества мелких файлов.

Спасибо всем за участие в решении кажущейся простой проблемы, но простого ее решения так и не увидел.
Так что пока придется по-прежнему клонировать с флешки :-(
Хоть и напрягает ее перевтыкивать, но зато результат 100% гарантирован.
А скорость подниму покупкой более скоростной флешкой.

chukcha ★★★★★
() автор топика
Последнее исправление: chukcha (всего исправлений: 1)

Я даже отдельную тему создавал. С определенного времени, некоторые дистры стали назначать произвольные имена дискам. Геологоразведка на буржуйских форумах дала наводку на возможного виновника - системд. Лично я наткнулся на такой косяк в дебиан 11.3 и опенсюсе 15.4

В Федоре 36 всё работает как надо.

П.С. проверьте что выдает /proc/self/mounts

utanho ★★★★★
()
Последнее исправление: utanho (всего исправлений: 1)
Ответ на: комментарий от utanho

А вот еще две идеи:

1) В GParted есть опция «Управление флагами - hidden»
Что, если сделать 2-й раздел невидимкой - он загружаться не будет?
Правда, почему-то этот флаг устанавливаться отказывается.

2) В нем же опция "Новый UUID". Т.е. генерируется новый случайный UUID, правда какой, не говорится.

Что скажете?

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

Ну как же, выше только и говорили о значимости UUID в этом вопросе

На лоре вообще любят поговорить. В основном не по-существу.

Дополнение:

Виноват скорее всего системд, а точнее вкоряченный в него удев. Буржуи пишлут примерно так:

Because udev loads all modules asynchronously, they are initialized in a different order. This can result in devices randomly switching names.

То есть это поведение бай дезигн.

utanho ★★★★★
()
Последнее исправление: utanho (всего исправлений: 1)
Ответ на: комментарий от utanho

Да уж, поговорить ты любишь.

Еще раз говорю, столкнулся с произвольным назначением канонических имен еще в 2004г. Когда даже слова systemd еще не существовало.

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

В основном не по-существу

Ну так поправьте эту ситуацию «по существу» :=)

Вот взгляните, какие флаги для разделов предлагает GParted:

  boot
  diags
  esp
  hidden
  irst
  lba
  lvm
  palo
  prep
  raid

Флаги boot и hidden, на которые возлагал надежды, судя по описаниям, либо уже устарели, либо срабатывают лишь для некоторых ОС.

Ладно, а что если обмануть резервный раздел, вкорячив ему, скажем, флаг
«palo» (используется менеджером загрузки «palo» для систем PA-RISC)
или «msftres» (используется для обозначения резервного раздела Microsoft)
или что-нибудь еще фейковое?

Загрузчик, будучи обманутым фейковым флагом, начнет грузить непонятно что и заткнется.

Так получится?

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

Загрузчик, будучи обманутым фейковым флагом, начнет грузить непонятно что и заткнется.

Так все-таки, так получится?

Создавай образ раздела в файл, а не на раздел /thread

Это, извините, как и чем?

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

Да, это действительно красивый поворот от хранения копий разделов в соответствующие файлы. Да и хранить их удобнее.

Ну тогда уж комфортнее сипользовать такой «шедевр», как Clonezilla.
Но только от нее у меня остались неприятные воспоминания, уже сообщал об этом - ненадежная штука, не гарантирует надежный цикл бекап/восстановление - восстановленный раздел иногда оказывался испорченным.
Не знаю, с чем это связано, но сталкивался неоднократно.

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

Если ты использовал раздел, то соглашался с тем, что у тебя на диске под него выделяется объем 1 к 1, то есть, если / у тебя 15G то и дополнительно занятое пространство под резервный раздел также равно 15G. Образ dd у тебя отнимет равно столько же. Не вижу смысла использовать всякие Clonezilla, если они глючные. Хотя это странно и с такой простой задачей она должна легко справляться

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

Это умеет штатная гномопрога. Gnome Disks

Умеет, конечно. Гнома у меня нет, поэтом в моем меню она обзывается Disks (Manager Driver and Media) и сохраняет образы в IMG - она?
Пользуюсь ей обычно для форматирования флешек, более серьезных задач ей не поручал, поскольку не знаю, на чем она базируется.
Может на dd ? Тогда ей можно доверять.
Но наверняка имеет минус - для минимизированных Иксов типа IceWM потребует приличного количества либ, а раздувать Иксы нет желания.
У кого есть опыт по ее использованию?

Образ dd у тебя отнимет равно столько же.

Это все понятно, dd надежная штука, хотя по ней у нас совсем недавно ругали ее и сломали множество копий.
И у нее есть существенный минус: поскольку консольная, требует предельной концентрации внимания, потому что стоит слегка перепутать параметры - и прощай, раздел!

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

Так на скриншот-то хотя-бы глянь. В заголовке окна: mc. В заголовке панели меню: User menu.

Начиная с прадедушки Norton commander, во всех двухпанельниках есть «User menu» - простой и эффективный способ создавать-хранить-запускать любые свои команды. В случае Midnight commander это может быть весьма объемный скрипт.

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

В заголовке окна: mc.

Что mc, понял сразу, а вот, что вы в него напихали до неузнаваемости - где оно? :=)


И еще споткнулся на простой командe dd:

sudo dd status=progress bs=4M if=/dev/sda1  of=dev/sdb6/test.img

dd: failed to open 'dev/sdb6/test.img': No a directory
ЧЯДНТ?? Это что же получается - как читать раздел, так пожалуйста, а как записывать в него, так фигушки??

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

Пропустил слеш -

sudo dd status=progress bs=4M if=/dev/sda1  of=/dev/sdb6/test.img
но в данной ситуации это не важно.

Конечно, я понимаю, что по большому счету выходной файл нужно копировать не в физический раздел of=/dev/sdb6 , а в каталог, , примонтировав его, например, в /mnt/sdb6
Но все равно как-то неожиданно...

chukcha ★★★★★
() автор топика
Последнее исправление: chukcha (всего исправлений: 1)
Ответ на: комментарий от chukcha

Читаешь ты весь раздел побайтово. И там в качестве ФС у тебя может быть что угодно. Ее даже может не быть, либо она может быть не поддерживаемой. А чтобы положить файл на раздел, ты должен его открыть (примонтировать). То есть, диски в /dev - это устройства. И запись в такие устройства перезапишет ФС

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

Так, «меню пользователя». Само название подразумевает, что ты посчитаешь нужным, что в него напихаешь, то и будет. Буквально, сегодня утром перетыкивал УСБ-шки и графика зависла. Курсор мышки движется, но ни на что не нажимает. Клавиатурой в «user menu» выбрал перезагрузку и штатно перезагрузился. Например, вчера приводил пример «распаковки *.gresources». Здесь код для монтирования-отмонтирования. Весьма полезно, если имеешь дело с образами. Например, примонтировал свой образ, скопировал из него пару-тройку файлов, отмонтировал. Все в mc.

Вот сейчас разберешься со своей командой и можешь, как есть, поместить ее туда.

У меня такой код:

+ ! t t & d /mnt & t d & f [fhmns][dmrv]* | f *.[bi][ims][agno] | D /mnt
= f *.[bi][ims][agno]
Copy block from device/image to other panel (f=if F=of)
  key=%{Enter block size: 446 512 1[KMGTPE] or 0=inf}
  # select file zero.bin for write zeros to /dev/*
  case ${key} in
    0)	key="";;
    *)	key="bs=${key} count=1";;
  esac
  case %f in
	  *.[bi][ims][agno]) dest=/dev/%F
			case %f in
			  zero.*) src='/dev/zero';;
			  *)	src=%d/%f;;
			esac;;
	  *[fhmns][dmrv]*) src=/dev/%f
			if [ -z "${key}" ]
			  then	case %f in
				  *fd*)	dest=%D/%f.ima;;
				  *[hs]d*|*[mn][mv]*) dest=%D/%f.img;;
				  *sr*)	dest=%D/%f.iso;;
				  *)	dest=%D/%f.bin && src='/dev/zero' && [ -z "$key" ] && key='bs=512'
					;;
				esac
			  else	case %f in
				  *[fhmns][dmrv]*) dest=%D/%f.bin;;
				  *)	dest=%D/%f.bin; src='/dev/zero';;
				esac
			fi;;
    *)	dest=%D/zero.bin && src='/dev/zero' && [ -z "$key" ] && key='bs=512'
	;;
  esac
  key="${key} status=progress"
  #key="${key} oflag=direct"
  dd if="${src}" of="${dest}" ${key}

«Копирование» в обе стороны, из устройства в образ и из образа в устройство.

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

Отлично, спасибо, заметано! :=)

А случаем ты не добавлял в это меню код для копирования файлов посредством rsync?
Можно и с ключиком -c
Сам понимаешь, rsync хоть и тормознее классического копирования, но гарантирует большую надежность, т.е. намного меньшее количество ошибок.

Сам несколько раз брался реализовать эту фичу, но так до конца и не довел.

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

Ты всё делаешь не так, вообще всё.

Для бэкапа раздела в твоём случае надо копировать в файл, а не в раздел.

Делать dd раздела, на котором сейчас загружена и работает система с сервисами - глупо, бэкап будет неконсистентный (примерно тоже самое, что и копировать /var/lib/mysql при работающем mysql).

Изучи, как грузится linux в bios и efi режиме, это несложно.

Причину не понял, но попытался избежать этой непредсказуемости запусков, отодвинув 2-й раздел в самый конец диска, чтобы загрузчик его «не достал» - увы, не помогло.

Это вообще запредельный шедевр.

Dimez ★★★★★
()
Последнее исправление: Dimez (всего исправлений: 1)
Ответ на: комментарий от Dimez

Для бэкапа раздела в твоём случае надо копировать в файл, а не в раздел.

Уже сообщал, что сейчас перешел как раз к такому методу.

Делать dd раздела, на котором сейчас загружена и работает система с сервисами - глупо, бэкап будет неконсистентный

Стопудово согласен. Только я такой глупости не говорил.

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