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

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


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


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


При будь-якої операції переміщення файлової системи необхідно переконатися, що дані були коректно скопійовані в нове місце. В лістингу 1 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 20 12:40 5bin -> ./bin/
lrwxrwxrwx 1 root root 9 Apr 20 12:34 X -> ./openwin/
drwxr-xr-x 6 root bin 512 Apr 20 12:42 X11/
lrwxrwxrwx 1 root root 3 Apr 20 12:41 X11R6 -> X11/
lrwxrwxrwx 1 root root 10 Apr 20 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 20 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 20 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 20 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>

*

*