Перенесення системи linux на інший вінчестер з переразбівкой розділів

Колись давним давно в далекій-далекій галактиці мені знадобилося перенести мою систему linux з одного вінчестера на інший, а користуватися пропріетарщіной жах, як не хотілося. Погуглити і пошукавши за допомогою інших пошукачів я знайшов для себе рішення, яке лінукс-адміну може здатися смішним, а мене воно тоді здорово виручило.

Загалом - ось воно. Бийте ногами, ріжте на частини. Зустрічайте!

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

Розберемо на конкретному прикладі моєї системи. Я збираюся перенести систему з HDD = 80Gb на HDD = 20Gb.

Мій диск, об'ємом 80Gb розмічений таким чином:

/ Dev / hda1 - / boot (250 Mb)
/ Dev / hda2 - swap (1Gb)
/ Dev / hda3 - extended (20Gb) (включає в себе / dev / hda5, / dev / hda6, / dev / hda7, / dev / hda8)
/ Dev / hda5 - / (5Gb)
/ Dev / hda6 - / tmp (512Mb)
/ Dev / hda7 - / usr (10Gb)
/ Dev / hda8 - / var (5Gb)
/ Dev / hda4 - / home (54Gb)

/ Home дуже сильно забитий інформацією, тому його в клонування я не включаю.

Виставивши перемички як годиться, я підключаю новий HDD в систему. Він прийняв мітку hdb
Можна розмітити його за допомогою будь-зручною для вас утиліти. Мені було простіше скористатися GPARTED - так візуально зрозуміліше, та й видно там відразу, скільки реально місця зайнято даними на тій чи іншій партіціі, що допоможе визначити чи варто виділяти стільки багато (або мало) місця.

Я розмістив новий диск (/ dev / hdb) наступним чином:

/ Dev / hdb1 - / boot (250 Mb)
/ Dev / hdb2 - swap (1Gb)
/ Dev / hdb3 - extended (14Gb) (включає в себе / dev / hdb5, / dev / hdb6, / dev / hdb7, / dev / hdb8)
/ Dev / hdb5 - / (1Gb)
/ Dev / hdb6 - / tmp (512Mb)
/ Dev / hdb7 - / var (5Gb)
/ Dev / hdb8 - / usr (7Gb)
/ Dev / hdb4 - / home (4Gb)

Наступним кроком треба подмонтировать все створені розділи на новому HDD до існуючої системи.
Для цього на існуючій системі я створив директорію / backup. в якій створив піддиректорії / boot, / root, / var, / usr (/ tmp - не треба), у відповідності до розділів на які я розділив новий HDD.
Далі здійснюємо саме монтування:

sudo mount / dev / hdb1 / backup / boot
sudo mount / dev / hdb5 / backup / root
sudo mount / dev / hdb7 / backup / var
sudo mount / dev / hdb8 / backup / usr

Ось і підібралися до найцікавішого, але аж ніяк не самому простому місця, до копіювання даних.
На відміну від Windows Linux дозволяє скопіювати себе ПОВНІСТЮ. Але треба пам'ятати один важливий момент - в системі є атрибути на директорії і файли, а так само симлінк і хардлінкі. Так ось необхідно так скопіювати систему, щоб всі ці зв'язки не розгубилися. Для такої процедури, на думку великих фахівців, найкраще підходить команда tar.
Сенс в тому, що ми НЕ БУДЕМО архівувати файли на диск, а будемо їх переносити через так звану «трубу» або «потік» на приймальний HDD.

Для спрощення процедури перенесення я написав скрипт backup.sh:

#! / Bin / sh
cd /
tar -cf - dev initrd.img opt srv bin cdrom etc initrd lib sbin sys vmlinuz | (Cd / backup / root; tar -xvpf -)
cd / boot
tar -cf - * | (Cd / backup / boot; tar -xvpf -)
cd / var
tar -cf - * | (Cd / backup / var; tar -xvpf -)
cd / usr
tar -cf - * (cd / backup / usr; tar -xvpf -)

трохи поясню, що до чого:

«Cd /»
- перехід в root

«Tar -cf - dev initrd.img opt srv bin cdrom etc initrd lib sbin sys | (Cd / backup / root; tar -xvpf -)
»- заtar Іван перерахованих директорій і файлів з передачею їх на расtar Іван на приймальний HDD.

Дізнатися які директорії і файли треба переносити нескладно. Просто виконайте команду «ls /» тим самим отримавши лістинг вашої системи починаючи з /.
У моєму випадку це:

ls /
backup boot dev home initrd.img media opt root srv tmp var
bin cdrom etc initrd lib mnt proc sbin sys usr vmlinuz

З усього цього «добра» нам потрібно виділити те що буде знаходитися в /.
Так, як я виділив окремі партіціі на диску під / boot, / var, / tmp, / usr і / home. виходить що їх на даному етапі потрібно пропустити. Отже беремо тільки dev initrd.img opt srv var
bin cdrom etc initrd lib sbin sys vmlinuz

А з рештою простіше:
cd / boot
- заходимо в існуючий / boot

tar -cf - * | (Cd / backup / boot; tar -xvpf -)
переносимо весь вміст / boot в / backup / boot

Отже запускаємо скрипт backup.sh і йдемо відпочивати на деякий час. У мене все зайняло близько 10 хвилин.

Тепер ще один важливий момент на який я спочатку не звертав увагу, за що поплатився зайвим часом і головним болем.

НЕДОСТАТНЬО просто скопіювати дані на партіціі / var, / tmp, / usr.
Після всіх процедур перенесення нам необхідно СТВОРИТИ ці директорії на приймальному диску, як точки монтування тих самих партіцій (і всі ті точки монтування, які ми виключили при перенесенні - / home, / media, / tmp, / var, / mnt, / proc, / usr) ОБОВ'ЯЗКОВО З ТИМИ Ж атрибутами! Тобто:

sudo mkdir / backup / root / home
sudo mkdir / backup / root / media
sudo mkdir / backup / root / tmp
sudo mkdir / backup / root / var
sudo mkdir / backup / root / mnt
sudo mkdir / backup / root / proc
sudo mkdir / backup / root / usr

які виставити атрибути на директорії можна дізнатися набравши команду ls -la / на вихідній системі. Але крім / tmp скрізь повинен бути власник root група root і права 766. На / tmp треба поставити права 777.

Тепер треба на приймальному HDD поправити fstab. якщо необхідно (якщо раптом ви ЗОВСІМ ПО ІНШОМУ розмітили диск). А так же поправити menu.lst завантажувача GRUB.

У UBUNTU що в fstab, що в menu.lst все диски прописані через UUID а не просто / dev / hda.
дізнатися який у вашого диска UUID можна за допомогою команди: ls -l / dev / disk / by-uuid. на виведення повинно вийти щось на зразок:

ось нам потрібні якраз цифри «11815c66-5ae7-4497-9039-51de9adef664», наприклад. Це UUID партіціі swap (в моєму випадку).

в menu.lst правимо наступні рядки:

kernel /vmlinuz-2.6.22-14-generic root = UUID = d4404ea9-0a8e-4a4c-b72d-10a5edd697be ro quiet splash locale

kernel /vmlinuz-2.6.22-14-generic root = UUID = d4404ea9-0a8e-4a4c-b72d-10a5edd697be ro single


Не забудьте той факт, що хоч система і скопійована на диск, але вона поки не вміє завантажуватися, тому що ми не встановили завантажувач.
Робиться це просто:
Беремо інсталяційний диск UBUNTU і вантажимося.
переходимо в консоль ctrl + f1

sudo su
grub
find / grub / stage1
root (hd0,0) сюди пишемо то що видала попередня команда
setup (hd0) сюди пишемо те ж саме але до першої коми.
quit

Все - отседіняем диск від системи, підключаємо, перевіряємо. У мене все запрацювало.

Так як я не переносив / home - то система лайнувся на те що я як користувач є а ось домашньої папки у мене немає. Я поступив варварським способом - userdel% username%, а потім adduser% username%.

Просто мені було неважливо. І лінь розставляти атрибути. А таким чином система зробила все за мене.

P.S. Не сваріть сильно за, можливо, застарілий спосіб, але на той момент він працював і працював добре! (Той момент можете обчислити за версією ядра згаданого в цій статті).

Перенесення системи linux на інший вінчестер з переразбівкой розділів

Установка Window7 (64Bit) на GPT диск, на материнках з EFI, без USB / DVD
Відразу слід уточнити, що мова піде про установку Win поруч з linux дистрибутивом. Тобто на комп'ютері повинен стояти grub-efi. Установка можлива тільки 64 бітної Windows системи. Так як у нас EFI плата, значить є хоча б один ФАТ32 розділ на диску. Так само нам потрібно створити розділ, куди ми розпакуємо образ Win.

Перенесення системи linux на інший вінчестер з переразбівкой розділів

Перенесення системи linux на інший вінчестер з переразбівкой розділів

Перенесення системи linux на інший вінчестер з переразбівкой розділів

Збірка кастомной прошивки OpenWRT
Не так давно перейнявся підняттям на своєму роутере D-Link DIR-320 сервера OpenVPN. Але після установки прошивки OpenWRT виявилося, що на 4-х мегабайтной флешці роутера не залишилося достатньо місця для установки OpenVPN. Виходом із ситуації стала збірка власного варіанту прошивки за допомогою Image Generator, що дозволило при тому ж наборі

Перенесення системи linux на інший вінчестер з переразбівкой розділів