Тонкий розрахунок - все дрібниці в рахунок копіюємо, змінюємо, об'єднуємо і правильно форматіруем диски і

Згодом потреби людини змінюються, а разом з ними змінюється і вміст жорсткого диска. Колись давно встановлений Windows згодом був видалений, а на його місці створено розділ для Linux. Встановлені «на подивитися» Linux-дистрибутиви зникли, звільнивши місце під нові дані. Залишилася тільки схожа на кашу таблиця розділів, яку доведеться виправляти, щоб остаточно не заплутатися в іменах розділів і точках монтування.

У цій статті ми розглянемо способи вирішення деяких дискових проблем, з якими рано чи пізно стикається кожен лінуксоїд. Прочитавши її, ти дізнаєшся, як змінювати розмір розділів, користуючись тільки стандартними Linux-утилітами, як об'єднати декілька розділів в один без переносу або втрати інформації, як скопіювати операційну систему на інший жорсткий диск і підготувати Linux до роботи з дисками, розмір секторів яких дорівнює 4 КБ.

Зміна розміру розділів

Уявімо собі таку ситуацію: на диску є два розширених розділу, кожен з яких розбитий на три підрозділи: swap, розділ, що містить Linux, і розділ / home. Це два Linux-дистрибутива, встановлені поруч один з одним. Відразу за ними йде розділ для даних. Одного разу ти розумієш, що другий Linux-дистрибутив тобі не потрібен, і вирішуєш видалити другий розширений розділ. На його місці залишається вільний простір, і тепер у тебе є дві можливості його утилізувати: створити додатковий розділ для даних, що буде зовсім не красиво, тому як один такий розділ вже є, або ж змінити розмір / home-розділу першого дистрибутива так, щоб він зайняв місце, що звільнилося простір і таким чином зберегти простоту і очевидність розмітки диска. Про те, як це зробити, ми поговоримо нижче.

Є як мінімум три способи змінити розмір розділу: скористатися графічної утилітою gparted, консольної утилітою parted, або зробити все руками. Перший спосіб дуже простий, щоб розглядати його детально, а ось другі два заслуговують на особливу увагу. Для початку розглянемо варіант з parted. Насамперед встановимо утиліту:

$ Sudo apt-get install parted

Далі переходимо в одного користувача режим і размонтіруем розділ / home:

$ Sudo telinit 1
# Umount / home

Якщо замість / home ти збираєшся змінювати розмір кореневого розділу Linux або будь-якого іншого системного розділу, то тобі доведеться завантажитися з LiveCD з передвстановленим parted. SystemRescueCD (www.sysresccd.org. Періодично ми викладаємо його на DVD) добре підійде на цю роль. Далі запускаємо parted від імені адміністратора:

$ Sudo parted / dev / sda

Все те ж саме можна зробити вручну. Це може бути корисним, коли потрібно змінити розмір системного розділу, а під рукою є тільки звичайний LiveCD без утиліти parted на борту. В цьому випадку зійдуть стандартні утиліти fdisk і resize2fs з пакета e2fsprogs (для файлових систем Ext2, Ext3 і Ext4). Завантажуємося з LiveCD, дивимося таблицю розділів:

Запам'ятовуємо номер першого циліндра розділу / home. Щоб зміна розміру ФС пройшло успішно, вона не повинна містити помилок, тому запускаємо fsck на розділі / home (тут і далі його ім'я буде / dev / sda7)

Тепер нам треба видалити розділ / dev / sda7 і створити на його місці розділ більшого розміру, який буде займати також і звільнену раніше область. Для цього запускаємо fdisk:

У відповідь на запрошення до введення пишемо команду 'd' (видалення розділу) і вводимо номер розділу (/ dev / sda7 = номер 7). Далі створюємо новий логічний розділ за допомогою команди 'n', слідом за якою пишемо 'l' (логічний розділ). У відповідь на запрошення до введення першого циліндра вказуємо номер, отриманий раніше за допомогою команди «fdisk -l». У відповідь на запрошення до введення останнього циліндра тиснемо (За замовчуванням fdisk робить новий розділ максимально можливого розміру, так що він займе і звільнену раніше область). Вводимо команду 'p', щоб перевірити правильність нової таблиці розділів, і записуємо зміни за допомогою команди 'w'. Перезавантажуємо комп і знову вантажимося з LiveCD. Виробляємо перевірку файлової системи:

Запускаємо утиліту resize2fs без аргументів, щоб вона автоматично зробила розмір файлової системи рівним розміру нового розділу:

Запускаємо контрольну перевірку ФС і перезавантажуємося:

# Fsck -n / dev / sda7
# reboot

об'єднання розділів

Прийом зі зміною розміру розділу добре підходить для об'єднання двох сусідніх розділів в один. Якщо файлові системи розділів зайняті менш ніж наполовину, ми можемо просто перенести інформацію з одного розділу в інший, видалити звільнений розділ і розширити залишився так, щоб він зайняв простір звільненого. Однак такий прийом не пройде, якщо обидва розділи заповнені під зав'язку, а можливості перенести дані на інший диск або носій немає. В цьому випадку тебе врятують спеціальні оверлейні файлові системи, що дозволяють віртуально об'єднувати файлові системи і монтувати їх обидві до одного каталогу.

Всього для Linux існує як мінімум три подібні ФС: unionfs, aufs2 і mhddfs. Перші дві включені в ядро ​​і, по суті, є різними реалізаціями одного і того ж механізму, причому aufs2 в силу своєї просунутості і стабільності вважається кращим варіантом. ФС mhddfs (Multi-HDD FileSystem, mhddfs.uvw.ru) - fuse-реалізація тієї ж ідеї, що володіє приємною смакотою у вигляді автоматичного переміщення зростаючого файлу до другого розділу в разі, якщо місце на першому закінчується.
Яку з них використовувати - вирішувати тобі, я ж просто покажу, як користуватися кожної з них. Припустимо, у тебе є три розділи і велика колекція музики, яку необхідно розподілити між ними (не влазять вона в один або два розділи). Розділи примонтировать до каталогів / mnt / disk1, / mnt / disk2 і / mnt / disk3, в кожному з них завчасно створено каталог Music.

Завдання: об'єднати всі три каталогу і змонтувати їх до каталогу / home / vasya / Music. За допомогою unionfs це завдання вирішується так:

$ Sudo mount -t unionfs -o dirs = / mnt / disk1 / Music = rw: / mnt / disk2 / Music = rw: / mnt / disk3 / Music unionfs / home / vasya / Music

За допомогою aufs2 - так:

$ Sudo mount -t aufs none / home / vasya / Music -o br: / mnt / disk1 / Music = rw: / mnt / disk2 / Music = rw: / mnt / disk3 / Music = rw, create = mfs, sum

А за допомогою mhddfs - ось так:

$ Sudo apt-get install mhddfs
$ Sudo mhddfs / mnt / disk1 / Music, / mnt / disk2 / Music, / mnt / disk3 / Music / home / vasya / Music -o mlimit = 10G

У першому випадку нові дані будуть записуватися в першу чергу в розділ, каталог якого зазначений першим, і тільки після заповнення розділу почнуть писатися в наступний. У другому (завдяки опції mfs) для запису буде завжди вибиратися каталог, розташований в розділі з найбільшим вільним простором. У третьому випадку спочатку буде обраний каталог, розташований на розділі з більш ніж 10 Гб вільного простору, і якщо такий знайдений не буде, запис піде на розділ з найбільшим вільним простором. Щоб не набирати все це руками після кожного завантаження, можна додати запис в / etc / fstab:

none / home / vasya / Music aufs br: / mnt / disk1 / Music = rw: / mnt / disk2 / Music = rw: / mnt / disk3 / Music, create = mfs, sum 0 0

Клонування і перенесення даних

Із змінами і об'єднаннями розділів розібралися, але що робити, якщо ти купив новий хард і хочеш перенести наявні ОС і дані на нього? Насправді все просто, Linux - гнучка ОС, яку досить легко перенести на інший диск. І способів зробити це є як мінімум два: вручну перенести файли ОС на інший диск, або скопіювати весь жорсткий диск / розділ (що зручно при клонуванні однієї інсталяції на безліч машин).

Розглянемо перший спосіб, взявши за основу дистрибутив Ubuntu 10.10. Щоб скопіювати його на інший диск, не потрібно нічого, крім диска і набору стандартних утиліт командного рядка. Ось покроковий опис всієї операції:

1. підчіплюють другий жорсткий диск до комп'ютера і завантажується з LiveCD.

2. Визначаємося з розділами, які слід перенести. Зазвичай Ubuntu встановлений або в один розділ (плюс swap), або в два: корінь і розділ / home. Створюємо на новому диску ті ж розділи (за допомогою cfdisk або gparted це зробити легко) і swap. Не забуваємо зробити кореневий розділ завантажувальним.

3. Створюємо точки монтування і підключаємо до відповідних тем старого і нового дисків (/ dev / sda - старий диск, / dev / sdb - новий):

# Mkdir / mnt /
# Mount / dev / sda1 / mnt / root1
# Mount / dev / sdb1 / mnt / root2
# Mount / dev / sda2 / mnt / home1
# Mount / dev / sdb2 / mnt / home2

У командах монтування підставляємо потрібні номери розділів.

4. Копіюємо файли на новий диск:

# Cp -ax / mnt / root1 / * / mnt / root2
# Cp -ax / mnt / home1 / * / mnt / home2

5. Далі виконуємо chroot в каталог / mnt / root2, виправляємо / mnt / root2 / etc / fstab і встановлюємо grub. Але щоб зробити це, слід змонтувати каталоги / dev і / proc к / mnt / root2:

# Mount --bind / dev / mnt / root2 / dev
# Mount --bind / proc / mnt / root2 / proc

6. Переходимо в пісочницю (chroot / mnt / root2) і редагуємо / etc / fstab:

/ Dev / sda1 / ext4 errors = remount-ro 0 1
/ Dev / sda2 / home ext4 defaults 0 2
/ Dev / sda3 none swap sw 0 0

Вказуємо потрібні імена розділів замість / dev / sda1, / dev / sda2 і / dev / sda3. Не забуваємо, що якщо ми збираємося поставити новий диск на місце старого, то його ім'я буде / dev / sda (а не / dev / sdb, як зараз).

7. Встановлюємо grub (все описане актуально тільки для grub2):

# Grub-mkdevicemap
# Grub-mkconfig> /boot/grub/grub.cfg
# Sudo grub-install / dev / sdb

8. Командою exit виходимо з chroot, вимикаємо машину, виймаємо старий диск, ставимо на його місце новий, включаємо машину.

Так зване клонування диска, коли замість окремих файлів на новий диск переноситься образ всього диска або розділу, зробити набагато простіше. Для цього можна використовувати штатну утиліту dd:

# Dd if = / dev / sda of = / dev / sdb bs = 4k

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

На початку року на ринках нашої країни з'явилися перші жорсткі диски компанії Western Digital, розмір сектора яких був збільшений з звичних 512 байт до 4 КБ (так звана технологія Advanced Format). За заявою компанії, нові диски мають більш високою швидкістю роботи, більшою ємністю при менших витратах на виробництво і повністю сумісні зі старими комп'ютерами. Однак виявилося, що, будучи відформатовані в Linux, BSD або WinXP / Win2k3, нові диски виявлялися не тільки зовсім спритними, але і разюче повільними (при записі спостерігалася 3-х / 4-х кратна втрата швидкості).

Нам, користувачам Linux, ні той, ні інший варіант не підходить, тому доведеться обходитися своїми силами. На щастя, нічого складного в процесі вирівнювання розділів немає, і нижче я покажу, як це правильно зробити за допомогою стандартного cfdisk.
Початок першого основного розділу досить просто розташувати в 64 секторі. Для цього запускаємо fdisk з опцією '-u':

Вводимо команду 'n' (новий розділ), далі 'p' (основний розділ), потім '1' (перший розділ), на питання про початок першого сектора вводимо 64, в якості останнього сектора вводимо бажаний розмір розділу в секторах (його можна обчислити, розділивши розмір розділу в байтах на 512). Записуємо таблицю розділів за допомогою команди 'w'. Далі розділ можна відформатувати і підключити:

# Mkfs.ext4 / dev / sdb1
# Mount / dev / sdb1 / mnt

Всі інші основні розділи диска також необхідно вирівнювати за допомогою вибору початкового сектора так, щоб його номер був кратний восьми. Завдання можна спростити, якщо при створенні кожного розділу вираховувати номер його останнього сектора так, щоб його номер був кратний восьми, і віднімати одиницю. Тоді наступний розділ за замовчуванням отримає правильний номер початкового сектора.

З розширеними розділами все набагато складніше. Кожен додатковий розділ може містити до чотирьох підрозділів, початок першого з яких також за замовчуванням розташовується в 63 секторі (тут справа не в оптимізації, введеної в обіг понад 20 років тому, а в тому, що розширений розділ був придуманий для емуляції фізичного диска). Тому спочатку доведеться створити розширений розділ з початковим сектором, кратним восьми, а потім створювати всі його внутрішні розділи з початковим сектором також кратним восьми. Тут низькорівневий cfdisk стає занадто небезпечним інструментом, тому краще скористатися програмою parted з опцією "-align optimal", завдяки якій всі створювані розділи будуть розташовуватися в правильних секторах.

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

Зміна розміру NTFS-розділу

1. Встановлюємо ntfsprogs:

$ Sudo apt-get install ntfsprogs

2. Размонтіруем NTFS-розділ:

$ Sudo umount / dev / sda1

$ Sudo ntfsresize -s 10000M / dev / sda1

4. За допомогою fdisk видаляємо NTFS-розділ і створюємо новий розміром 10000 Мб;

5. Перезавантажуємося в Windows і даємо їй можливість виконати перевірку ФС.

Клонування диска на іншу машину підручними засобами

На машині-джерелі виконуємо:

# Dd if = / dev / sda bs = 4k | netcat тисячу двісті тридцять чотири

# Netcat -l -p 1234 | dd of = / dev / sdb bs = 4k

Зменшуємо розмір образу dd

Ти можеш істотно зменшити розмір архіву з образом розділу, зробленим dd, якщо попередньо заб'єш його нулями (друга команда повинна привести до вичерпання простору на ФС, це нормально):

# Mount / dev / sda1 / mnt
# Dd if = / dev / zero of = / mnt / zero bs = 4k
# Rm -f / mnt / zero

Під час перенесення ФС на інший диск замість імен розділів в fstab можна вказати і прийняті в Ubuntu UUID, які можна дізнатися за допомогою команди blkid:

$ Sudo blkid / dev / sda1

Прогрес копіювання dd можна дізнатися, набравши в сусідньому терміналі команду:

$ Sudo watch -n60 killall -SIGUSR1 dd

Покажи цю статтю друзям: