System Administration Toolkit: Переміщення файлової системи в UNIX

Переміщення каталогу або файлової системи в UNIX


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


В останньому випадку (переміщення працює файлової системи), може знадобитися переміщати додаток в той час, коли воно працює. У будь-якому випадку потрібно перемістити каталоги з системними файлами системи, такі як / usr або / var, і незалежно від того, працює комп'ютер у режимі одного чи ні, ці файли системи можуть активно використовуватися.


При будь-якій операції переміщення файлової системи необхідно переконатися, що дані були коректно скопійовані в нове місце. У лістингу 1 січня показано розбиття жорсткого диска на розділи і розміщення файлової системи.


Лістинг 1. Приклад використання файлової системи і жорсткого диска





Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 7692908 6467756 1225152 84% /
udev 517560 184 517376 1% /dev
/ Dev/hda1 115377640 1743668 107773060 2% / var / lib / mysql
/ Dev/hdb1 115380192 14604460 94914696 14% / export / data
/ Dev/hde1 96132940 3962940 87286644 5% / export / home
/dev/hde4 22960280 133484 21660480 1% /tmp
none 517560 0 517560 0% / dev / shm

Як можна побачити з лістингу 1, коренева файлова система на 84% заповнена, і адміністратору, можливо, доведеться перемістити каталог з кореневої файлової системи на інший логічний розділ, щоб звільнити в кореневій файловій системі трохи місця.


У такому випадку найкраще переміщати один великий каталог певного призначення, який має великий вплив на файлову систему, оскільки тоді у файловій системі буде звільнено значну кількість дискового простору. У даному випадку потрібно перемістити каталог / var або / usr в знову створену файлову систему. Переміщення маленьких каталогів, хай їх і багато, буде неефективним: для звільнення дискового простору простіше перемістити один, але великий каталог.


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


Я припускаю, що в читача вже є або новий жорсткий диск, або чистий розділ на жорсткому диску, який буде використовуватися для копіювання або файлової системи.


Послідовність дій при переміщенні даних


Базова послідовність дій при переміщенні файлової системи або переміщенні каталогу в нову файлову систему буде така:



В ідеалі після всіх цих дій необхідно виконати перезавантаження операційної системи, хоча це не завжди потрібно або можливо, але в будь-якому випадку необхідно спробувати перезавантажити ОС.


Давайте докладніше розглянемо перераховані вище дії.


Створення нового логічного розділу і файлової системи


Перш ніж створити новий логічний розділ і файлову систему, необхідно переконатися що того простору, яке буде відведено під новий розділ, вистачить для файлів, які будуть скопійовані в нову файлову систему, коли вона буде змонтована на цей розділ. Наприклад, якщо необхідно перемістити каталог / usr поточної файлової системи, потрібно користуватися командою з лістингу 2.


Лістинг 2. Переміщення каталогу / usr з поточної файлової системи





$ du -sk /usr
3923068 /usr

Опція -s гарантує, що відобразиться загальний розмір каталогу в цілому, а не розмір елементів його вмісту окремо, а опція -k відповідає за те, щоб розмір каталогу відображався в кілобайтах. З інформації, наданої командою, можна припустити, що новий розділ повинен бути розміром по крайней мере в 4 Гб.


Якщо буде виконано переміщення поточної файлової системи, а не окремого каталогу з поточної файлової системи, у розділ більшого, ніж необхідно розміру, то для визначення розміру поточної файлової системи треба використовувати команду df.


Після того як ми визначили розмір поточної файлової системи, треба створити логічний розділ, який на 25% більше, ніж необхідно (принаймні новий логічний розділ повинен мати запас на 10% більше, ніж необхідно). Наприклад, для файлової системи з прикладу вище розмір нового розділу повинен бути не менше 5 Гб.


Щоб створити новий розділ і файлову систему, використовуються стандартні утиліти операційної системи. Наприклад:



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


Для прикладу з / usr вище я створив новий каталог / mnt / usr.tmp, в якому і змонтував файлову систему.


Копіювання даних


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


Копіювати можна безліччю різних способів. Двома найпоширенішими є використання утиліт cp або tar. Перша команда виконується з дуже великою швидкістю, але при роботі з нею можуть виникнути проблеми з нестандартними файлами, такими як конвеєри та файли пристроїв. Утиліта tar більш повільна, але підтримує всі типи файлів і виводить звіт про процес копіювання.


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


Використання cp


Інструмент cp Вона підтримує рекурсивне опцію -r, Яка копіює всі файли, каталоги і їх вкладені файли у папку призначення. Щоб зберегти права доступу та імена власників для копійованих файлів можна використовувати опцію -p. Це дуже важливо, якщо треба, щоб нова файлова система зберігала параметри безпеки вихідної файлової системи. Проте є ситуації, коли збереження деталей безпеки не потрібно.


Щоб скопіювати файли з існуючого каталогу в новий каталог, виконайте наступні кроки:



  1. Змініть поточний робочий каталог на цільовий, щойно створений каталог, після цього переконаєтеся, що перейшли в потрібний каталог (див. лістинг 3).

    Лістинг 3. Зміна робочого каталогу





    $ cd /mnt/usr.tmp
    $ pwd
    /mnt/usr.tmp


  2. 2. Скопіюйте файли зі старого каталогу в поточний (новий каталог), як показано в лістингу 4.

    Лістинг 4. Копіювання файлів в новий каталог





    $ cp -pr /usr/* .


Далі потрібно швидко перевірити, чи всі файли скопійовано правильно. Для цієї мети підійде команда ls (Див. лістинг 5). Методики, що надають більш детальну інформацію, я розгляну пізніше.


Лістинг 5. Верифікація скопійованих файлів





$ ls -l /usr
total 238
drwxr-xr-x 2 root bin 1024 Apr 20 13:11 4lib/
lrwxrwxrwx 1 root root 5 Apr 1920 12:40 5bin ->. / bin /
lrwxrwxrwx 1 root root 9 Apr 1920 12:34 X ->. / openwin /
drwxr-xr-x 6 root bin 512 Apr 20 12:42 X11/
lrwxrwxrwx 1 root root 3 Apr 1920 12:41 X11R6 -> X11 /
lrwxrwxrwx 1 root root 10 Apr 1920 13:03 adm -> .. / var / adm /
drwxr-xr-x 10 root bin 512 Apr 20 12:59 apache/
drwxr-xr-x 8 root bin 512 Apr 20 12:47 apache2/
drwxr-xr-x 8 root bin 512 Apr 1920 12:53 appserver /
drwx—— 8 root bin 512 Apr 20 12:53 aset/
drwxr-xr-x 4 root bin 16384 Apr 20 13:17 bin/
drwxr-xr-x 4 root bin 512 Apr 20 12:33 ccs/

lrwxrwxrwx 1 root root 10 Apr 1920 12:32 tmp -> .. / var / tmp /
drwxr-xr-x 4 root bin 2048 Apr 20 13:00 ucb/
drwxr-xr-x 4 root bin 512 Apr 1920 13:17 ucbinclude /
drwxr-xr-x 3 root bin 1024 Apr 20 13:17 ucblib/
drwxr-xr-x 7 root bin 512 Apr 20 13:03 vmsys/
drwxr-xr-x 5 root bin 512 Apr 20 12:44 xpg4/
drwxr-xr-x 3 root bin 512 Apr 20 12:40 xpg6

Якщо з'ясується, що деякі файли скопійовані некоректно, або якщо символьна заслання і інші спеціальні типи файли скопійовано некоректно, можна спробувати використовувати tar.


Використання tar


Утиліта tar має ряд переваг у порівнянні з cp. Перше і найголовніше – tar краще підтримує нестандартні типи файлів. Друга перевага полягає в тому, що tar в онлайні виводить звіт про файли, які обробляє (це зручно для копіювання файлів з однієї файлової системи на іншу). Остання основна перевага – tar можна використовувати для створення резервної копії початкового файлової системи, яка знадобиться у разі проблем з жорстким диском. На одного користувача комп'ютері за допомогою tar можна створювати нову файлову систему з усім вмістом без попереднього монтування її в тимчасовий каталог.


Кращий спосіб використовувати tar для копіювання даних – передати файл, створений цією утилітою, через інше виконується утиліту tar в новий каталог, в якому друга утиліта tar виконає його розпакування. Ця дія показано в лістингу 6.


Лістинг 6. Використання tar для копіювання





$ cd /usr
$ tar cfp – ./* /(cd /mnt/usr.tmp; tar xvfp -)

Аргумент c в першій команді tar каже, що tar повинен створити архів. Опції v, f, І p забезпечують детальну інформацію (виводять файли, які були додані до архіву або вилучені з нього), здійснює запис у файл або читання з файлу (файл використовується замість магнітної стрічки) і зберігає усі повноваження та імена власників відповідно.


Лістинг 6 працює тому, що друга частина команди міняє робочий каталог, перш ніж читати файл. Tar, який був створений першою половиною команди.


Якщо потрібно створити файл. Tar і згодом використовувати його, а не виконувати пряме копіювання, то файлова система повинна бути достатньо місткою, щоб зберігати усі ці тимчасові файли з вихідного каталогу. Лістинг 7 показує процес копіювання.


Лістинг 7. Процес копіювання





$ cd /usr
$ tar cfp /tmp/usr.tar ./*
$ cd /mnt/usr.tmp
$ tar xvfp /tmp/usr.tar

Який би метод роботи з tar ні використовувався, застосування опції v надасть звіт про кожен файл, який доданий до архіву або витягнутий з нього (див. лістинг 8).


Лістинг 8. Виведення інформації про процес копіювання





a ./4lib/ 0K
a ./4lib/libX.so.1.0 symbolic link to ./libX11.so.4.3
a ./4lib/libX11.so.4.3 216K
a ./4lib/libXaw.so.4.0 208K
a ./4lib/libXmu.so.4.0 72K
a ./4lib/libXol.so.3.1 1056K
a ./4lib/libXt.so.4.1 264K
a ./4lib/libce.so.0.0 48K
a ./4lib/libdeskset.so.0.1 64K
a ./4lib/libdga.so.1.0 40K
a ./4lib/libhelp.so.1.0 24K
a ./4lib/libolgx.so.3.1 56K
a ./4lib/libtt.so.1.1 848K
a ./4lib/libttstub.so.1.1 32K
a ./4lib/libxview.so.3.73 1328K
a ./4lib/libdl.so.1.0 symbolic link to ../../lib/libdl.so.1
a ./4lib/libc.so.1.9 403K
a ./4lib/libc.so.2.9 402K


tar і безпосереднє копіювання файлової системи


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


При монтуванні в каталог нової файлової системи:



  1. Створіть новий розділ і файлову систему, як було пояснено вище.
  2. Створіть. Tar-файл з вихідним каталогом (див. лістинг 9).

    Лістинг 9. Створюємо. Tar-файл





    $ cd /home
    $ tar cfvp /tmp/home.tar


  3. Перейменовуємо вихідний каталог (див. лістинг 10).

    Лістинг 10. Перейменування вихідного каталогу





    $ cd ..
    $ mv home home.old


  4. Створюємо каталог та задаємо йому права доступу і групу-власника, таку ж, як і у вихідного каталогу.
  5. Змонтуємо файлову систему в новий каталог.
  6. 6. Витягаємо дані із.tar-файлу (див. лістинг 11).

    Лістинг 11. Розпакування. Tar-файлу





    $ cd home
    $ tar xvfp /tmp/home.tar


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


Лістинг 12. Зміна логічного розділу існуючої файлової системи





$ cd ..
$ umount /home

Це операція цілком безпечна, оскільки у нас є точна копія вихідної файлової системи на старому логічному розділі. У будь-якому з наведених вище рішень вихідна копія файлової системи з даними не видаляється.


Перевірка копії


Використовуєте ви cp або tar, Завжди необхідно перевіряти, чи успішним було копіювання. Хоча tar і виводить підтвердження, що файл був скопійований (за допомогою опції v), Все-таки слід переконатися, що файли були коректно скопійовані в нову файлову систему.


Спочатку перевіримо інформацію, яку виведе команда du для старої і нової файлової системи (див. лістинг 13).


Лістинг 13. Результати роботи du





$ du -sk /usr
3923068 /usr
$ du -sk /mnt/usr.tmp
3923068 /mnt/usr.tmp

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


Іншим хорошим тестом є порівняння числа файлів і каталогів у вихідній і нової файлової системи. Здійснити підрахунок файлів можна командою find, Як показано в лістингу 14.


Лістинг 14. Порівняння числа файлів / каталогів в новій і вихідної файлової системи.





$ find /usr /wc -l
347001
$ find /mnt/usr.tmp /wc -l
347001

Інший хорошою перевіркою після копіювання файлової системи є порівняння числа inode-файлів у вихідній і нової файлових системах; ця перевірка покаже, скільки inode-файлів було розподілено для нової файлової системи. Якщо нова файлова система такого ж типу що і початкова, кількість inode-файлів для кожної файлової системи має бути однаково. Використовуйте df з опцією -i для отримання статистичної інформації про inode-файлах або – на традиційних UNIX-системах – df без будь-яких опцій покаже число створених "файлів".


Лістинг 15 виконаний у Linux-системі


Лістинг 15. Порівняння числа inode-файлів





$ df -i /usr
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 977280 411959 565321 43% /

Лістинг 16 здійснений в ОС Solaris.


Лістинг 16. Порівняння числа inode-файлів в ОС Solaris





$ /bin/df /usr
/ Usr (/ dev/dsk/c0t0d0s3): 9076010 blocks 863695 files

Завершення установки файлової системи


До цього етапу у вас повинна вже бути нова файлова система, яка містить копію старої файлової системи або каталогу зі старої файлової системи. Тепер треба оновити системні файли ОС (особливо інформацію про змонтованих файлових системах) для підтримки нової файлової системи. Ця інформація зберігається в файлах / etc / fstab, / etc / vfstab або може бути доступна через спеціальну утиліту для адміністрування, наприклад, SAM в HP-UX.


Якщо в межах існуючої файлової системи вами був переміщений каталог, то:



  1. Перейменуйте вихідний каталог.
  2. Створіть новий каталог
  3. Використовуйте chown і chmod щоб задати прав доступу та власників для нового каталогу.

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


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


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


Висновок


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


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


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*