LINUX.ORG.RU
ФорумAdmin

«Малиновые» проблемы

 ,


0

2

И снова всем привет!
Как же я за вами всеми соскучился 😂

У меня работает Малинка-3 с консольным Raspbian, успешно мониторя поступающую солнечную энергию.
Работает и каши не просит, только электричество. Но все хорошее когда-нибудь заканчивается.
Думаю, в первую очередь это произойдет с SD-карточкой, когда на ней сотрутся все гигабайты.
Поэтому решил сотворить бекап-карточку.

Вытащил SD из Малинки, воткнул в Debian и с помощью Gparted склонировал разделы /boot и /root , и думал, на этом все.

Ан нет! При проверке полученной бекапной SD ее Raspbian упорно не запускается! 😳

Что же я сделал не так? 🙈

★★★★★

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

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

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

Побитно - это как? 😃

как как через dd конечно https://askubuntu.com/questions/227924/sd-card-cloning-using-the-dd-command типа такого

И почему GParted не справился?

ХЗ, 2 варианта в голову сразу приходят UUID другой стал и fstab поломался как следствие, ну или когда у тебя загрузчик начинает систему грузить он конкретный номер блока считывает при начале загрузки (драйвер ФС на этом этапе то не загружен, сначала надо ядро загрузить, ну и сам загрузчик в конкретном месте диска должен быть, биос/uefi они ещё более тупенькие чем загрузчик), вот этот номер мог поменяться т.к. GParted-у вероятно фиолетово на всё это, главное чтоб раздел был работоспособным после его копирования, а если что-то куда-то уедет по адресации GParted-у фиолетово.

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

Потому что в GPT (например) всё имеет свой UUID. Кроме того, совершенно не факт что у тебя все записано в разделы. А поскольку бутлоадеры ARM вообще упоротые нахрен (например некоторым нужно чтобы разделы начинались со строго заданных адресов) там вообще возможна любая дичь.

Поэтому не вые…ся а просто скопируй используя dd, который сохранить все UUID и расположение и вообще все что есть

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

А ёлки... Ты никогда не знал про проблемы клонирования с бОльшего носителя на меньший? Ты понимаешь, что гпартед (тулза которой он пользуется) тупо обрезает раздел ничего об этом не сообщая?

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

почему Gparted не справляется с этой задачей?

Потому что это утилита для редактирования разделов. Для клонирования есть например clonezilla, вот она умеет клонировать с ресайзом и внесением всех изменений, чтобы потом загружалось. Ну по крайней мере на PC)

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

Нет, но ты можешь сначала отресайзить разделы на исходной карточке например до 30Гб, а потом уже склонировать через dd.

Я так обычно и делаю, и спросил насчет «полета» dd на всякий случай, вдруг я чего не знаю

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

Новая карта 10 класса? У меня на второй малине было такое, что с карты 4 класса она не стартовала ни в какую. Я уже подумал, что сама малина отрыгнула, но в какой-то момент я попробовал карту 10 класса и всё заработало.

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

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

Для клонирования есть например clonezilla, вот она умеет клонировать с ресайзом

Вах, только не это! Утилита хороша, но юзабельность и интуитивность ее пользования близка к абсолютному нулю.
А это может привести к тому, что скопируешь не то и не туда, и пипец разделам.

Так что одно время пользовался, а потом отказался.

Есть еще одна какая-то, более понятная, попробую вспомнить....

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

С ними порядок, все карточки проверены и работают

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

Это раз. Второе - в самом Raspbian есть какая-то утилита, которая как раз и создана для клонирования этой системы.

Вопрос только в том, что система будет склонирована в запущенном состоянии, и каким боком это потом скажется, непонятно.
Обычно принято клонировать системы в shutdown состоянии.

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

Не ну тут совсем так не делают. Может тогда уж проще разбить всё как надо на этой карточке, поставить нужный софт, а потом конфиги подтянуть через какой-то Rsync?

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

Ну тебе написали уже, что с большего на меньший носитель в лоб нельзя копировать, либо 1 в 1 копируют, либо с меньшего на больший с последующей правкой разделов на большем. Потому как тебе в любом случае размер всех разделов менять надо, то есть смысл просто поставить Raspbian с нуля, назвать юзера так же, а потом подтянуть конфиги любым удобным средством (по сути тебе только хомяк надо скопировать со всеми правами на файлы в нём, может ещё 2-3 конфига глобальных, сомневаюсь что у тебя сильно всё переделано). Список софта установленного тоже можно получить в убунте к примеру, так можно было раньше, как сейчас давно не смотрел:

на оригинальной системе

dpkg --get-selections > list.txt 
потом на клоне забираешь файл list.txt и делаешь
dpkg --clear-selections
sudo dpkg --set-selections < list.txt
sudo apt-get autoremove
sudo apt-get dselect-upgrade
А конфиги ручками иногда полезно перепроверять, я вот сейчас мигрирую с ubuntu 22.04 (точнее готовлюсь к миграции, софт проверяю, думаю что можно нового взять, что старого оставить) и смотрю что очень много конфигов которые вообще прекратили работу, ошмётков от софта который я уже никогда не буду использовать и так далее. Даже в репах у меня бардак, т.к. лежат какие-то куски отключенные которые ещё в 14.04 версии были, какой-то софт захолдженный который когда-то из-за бага был откачен и заморожен вручную, а когда баги исправили я просто забыл его разлочить на обновления, когда от этого софта ничего особо не зависит (если пол системы не обновится из-за старой библиотеки, то я приму меры быстро, а если это какая-то софтина в себе, то она долго может в таком виде быть).

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

Спасибо peregrine! Очень познавательно и поучительно.
Желаю удачи в миграции!

Что до ошметков, то да. Например, сколько лет в дистрах есть каталоги и файлы нулевого размера, которые никогда никем не используется, только создают хаос в системе.
Надо бы проводить в ней ревизии и выкидывать неиспользуемый хлам, но дистростроители совсем обленились :-(

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

Raspbian упорно не запускается!

uboot то загружается или вобще ничего?

Так, принято взять обычный комп, с достатоным объёмом свободного места, воткнуть туда sd-карточку, сделать dd всей карточки (допустим /dev/sdb). Потом этот образ (файл) сжать bash-скриптом https://github.com/Drewsif/PiShrink, он ужмёт его без компрессии (gz), а просто выкидывая пустые блоки. И будет понятно, какой минимальный размер новой SD-карты нужен.

Потом уже этот образ dd на новую карточку, при загрузке с неё ФС будет автоматически расширена до размера SD-карты.

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

Ну так как насчет полета? :=)

Создай на пустом месте файл из нулей (/dev/zero), после этого копируй с помощью dd и сжимай его. Место из нулей очень хорошо сожмётся, место будут занимать только актуальные файлы

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

https://github.com/Drewsif/PiShrink

upd: вижу, уже насоветовали выше )))

upd2: перед снятием образа можешь сделать apt clean, что в моей практике ужимает результирующий образ ещё на пару сотен мегабайт

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

Неее. ваши благородия, ваш dd показал свое не лучшее лицо, а скорее з-цу.

Как было дело:
- есть исходная SD-карточка Kingston объемом 32 GB с настроенным Raspbian.
Разбивка ее, если смотреть в в Gparted, такая:

- неразмеченно = 4.00 МиБ
- bootfs fat32 = 512.00 МиБ
- rootfs ext4 = 31.39 Миб

Втыкаю ее в комп и выполняю:

# dd if=/dev/sdb of=/home/user/raspi.img  conv=sync,noerror bs=1M status=progress
Получаю IMG-образ размером 29.9 ГиБ/30608 МБ. При желании его можно сжать gzip.
И что, думаете, можно радоваться? А фигушки!

Берем другую SD-карточку, тоже Kingston и тоже объемом 32 GB
Выполняем:
# dd if=/home/user/raspi.img of=/dev/sdb  conv=sync,noerror bs=1M status=progress
После томительного ожидания получаем ... ошибку нехватки места! 😡
Образ, видите ли, не влез в другую аналогичную карточку.
Конечно, я понимаю, что другая карточка оказалась на каких-то пару байт меньше, но мне-то что с того??
Я что, должен специально подбирать таргетированную карточку, чтобы в нее «влизло»? Да нафиг мне надо эта ргадость!

Причем предварительное уменьшение 2-го раздела ничего не дает, потому что dd тупо копирует весь объем диска, от Баха до Феербаха.

Надо другой способ, более разумный и не такой критичный к объему носителей.

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

При желании его можно сжать gzip.

При желании сделать всё через одно место ещё и не такое можно. Нужно было скачать pishrink.sh, сделать его исполняемым потом запустить его с указанием файл-образа, снятого с помощью dd:

# pishrink.sh raspi.img
Этот raspi.img должен стать существенно меньше и его уже пытаться записать с помощью dd. Скрипт уменьшает и размер ФС, и размер раздела, и размер образа. А при первой загрузке с такой SD-карты, размер раздела/ФС расширяется до размер SD-карты.

Я что, должен специально подбирать таргетированную карточку, чтобы в нее «влизло»?

Если хотите совсем по простому, то берёте карточку 64Гб, туда точно 32Гб влезет. А иначе читайте сообщения полностью и пытайтесь выполнить все советуемые действия, а не выборочно.

mky ★★★★★
()
  • разметить новую карточку руками

  • смонтировать старую (все разделы) в /mnt/orig

  • смонтировать новую (все разделы) в /mnt/new

  • rsync -bpv /mnt/orig /mnt/new

  • (опционально) забыть шиновсячие привычки с «клонированием» и прочей непонятной магией.

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

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

Если запущено что-то критически важное в части записи на диск (субд и т.п.) перед клонированием остановите.

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

Нужно было скачать pishrink.sh

Да, смотрел этот скрипт. А также посмотрел, сколько у него иссуе, и решил- ну его нафиг.
Это же простейшая задача, и сколько в нем было косяков.
Для такой важной задачи как клонирование дисков ему доверия нет.

Но дело даже не в этом:

Скрипт уменьшает и размер ФС, и размер раздела, и размер образа.

Пусть их уменьшает, но толку с этого? Для dd это абсолютно фиолетово, потому что он копирует ВЕСЬ диск, независимо от его содержания и того, каких размеров в нем разделы.

> Если хотите совсем по простому, то берёте карточку 64Гб, туда точно 32Гб влезет.

Из-за предыдущего абзаца я тоже пришел к аналогичному выводу: нужно систему изначально ставить на маленькую карточку (у меня нашлась на 8 ГБ), а потом переносить на большую.
И этот вынужденный прием опять-таки указывает слабость dd для клонирования дисков.

Но с помощью dd можно переносить диск по частям - сначала один раздел, потом другой.
Тогда да, перенесутся уменьшенные разделы. Но как это делать, чтобы сохранилось загрузочность бута, не знаю.

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

Когда диск скопирован в файл, то нет там «копирует ВЕСЬ диск», там уже только размер файла, и pishrink.sh уменьшает размер этого файла.

И dd можно указать сколько блоков копировать, то есть не весь диск, но это нужно считать. Там же MBR, GPT не поддерживается, поэтому всё достаточно просто, нет необходимости оставлять в конце диска пустое место под копию GPT.

ему доверия нет

Да как хотите, нет так нет :)

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

Когда диск скопирован в файл, то нет там «копирует ВЕСЬ диск», там уже только размер файла, и pishrink.sh уменьшает размер этого файла.

А толку-то? Меня в данный момент интересует не размер получаемого IMG-файла (это совсем другая задача), а корректное копирование всех исходных разделов вместе с MBR/GPT.
Для того, чтобы восстановленный диск тоже был загрузочным.

И dd можно указать сколько блоков копировать, то есть не весь диск, но это нужно считать

Вот именно!!! Я же с этого начала и толкую об утилите, в которой пользователю не нужно считать, сколько там блоков/цилиндров нужно копировать.
Почему это я должен за нее считать? Это же ^машина^, вот пусть она и считает, а не меня напрягает .

Как идеальный пример - этот тот же Gparted, но вод достада - он не умеет MBR переносить.

Буду еще искать, емнип, есть какие клоне-диски и т.п., надо тестить.

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

У малины всё просто: разметка MBR, первый раздел primary с fat32, где валяются фирмварь и загрузчики и/или ядро с инитрд. Загрузочность завистит от этого. Остальное зависит от раскладки конкретной системы. Хоть dm-raid+luks+lvm+еще что-нить. В самом простом варианте с 2 разделами (раздел с фирмварью + ext раздел для корня) можно сделать resize -M на корень, после dd с count=(смещение раздела корня + resize -P корня + сколько свободного места хочется).

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

Спасибо, что расписал малинку, познавательно. Хотя мне сейчас нужнее юзабельная утилита для ^полного^ клонирования.

Кстати, а как насчет совместимости «малинок»?
Если я возьму SD-карточку, которая проинсталлована для Малинки-3, и воткну ее в Малинку-4 или Zero - будет работать?

На офсайте где-то встречалось, что у «малинок» совместимость полная.
Недавно попробовал переставить карточку с Малинки-4 в Zero 2W, но получил классическую индейскую хижину.

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

На офсайте где-то встречалось, что у «малинок» совместимость полная.

Совместимость у них декларируется на официальной Raspberrypi OS, где два раздела на карте и фирмварь, ядра, dts’ы от производителя на первом. 32-битная версия их ОСи должна поддерживать все малины, начиная с первой, 64-битная держит все, начиная с 3-ей.

Шаг влево-вправо - будут варианты и, следовательно, разбирайся сам.

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

Если официальный и свежей версии, проблем быть не должно, максимум придется поиграться с config.txt. Возможно, явно заданные kernel и/или arm_64bit в конфиге позволят загрузиться на zero 2w.

В загрузочном разделе лежат всякие kernel*.img. Это ядра различных разрядностей для всех выпущенных малин. Разные модели плат грузят по умолчанию каждая свое ядро.

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

Хорошо. А можешь ли ты, или кто еще из таких крутых знатоков «малинок» как ты, подсказать реализацию идеи по электропитанию?

Идея создать квази-UPS для «малинки» при питании от батареи.
Да, знаю, знаю, для них готовых платок на Али полно, но это не то, что мне нужно, и сложно.

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

Вначале надеялся, что разработчики «малинок» предусмотрели хотя бы один аналоговый вход.
И тогда можно было его подключить через резистивный делитель к батарее, и в цикле или по прерываниям опрашивать ее напряжение, и когда оно падает, например, ниже 4.7 V, подать команду 'poweroff'.

Но когда получше ознакомился с GPIO, офигел - оказывается, аналогового входа у нее нет! 😡
И это просто позорище, потому что даже в Arduino есть и входы, и выходы.
Так что пришлось идею с квази-UPS отложить в долгий ящик....

Но недавно, наблюдая, как на рабочем столе в правом верхнем углу периодически вспыхивает значок молнии, предупреждая о низком напряжении питании, понял, что это - эврика! 😃
Ведь это значит, что «малинки» имеют собственный внутренний контроль напряжения, и можно объединить 'poweroff' с ним.

Но как это сделать❓

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

Да, знаю, знаю, для них готовых платок на Али полно, но это не то, что мне нужно, и сложно.

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

Велосипед тебе обойдётся сложнее, чем поставить подобную шляпу, которая умеет отчитываться и об уровне заряда батареи (I2C), в качестве бонуса имеет настоящие часы реального времени

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

Ну это если кому нужна такая многофункциональность, то да.
Но мне она в принципе не нужна, даже если достанется даром.
Не хочу усложнять аппаратную часть всякими устройствами, только «малинка» и все.

Так что мой вопрос - как добраться до «молнии» в консоли? - остается в силе.

имеет смысл поглядеть в сторону vcgencmd.

смотрел, и не раз, но оно контролирует не 5 Вольт, а 3.3.

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

Вот спасибо! 👍
Теперь только осталось скрипт наваять под него.
Как думаете, bash с этим справится, или нужно что-то низкоуровневое?

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