перейменування величезної папки: це ризиковано?


19

Чи ризиковано перейменувати папку на 180 Гб за допомогою mvкоманди?

У нас є папка, /dataяка містить 180 Гб.

Ми хочемо перейменувати /dataпапку /BD_FILESв mvкоманду.

Чи безпечно це робити?


14
Чому і як це має бути ризикованим? Якщо ви не впевнені, зателефонуйте за mvдопомогою цієї -iопції.
десерт

5
Чи є у вашому оточенні щось, що спонукає вас думати, що це може бути ризиковано?
Джефф Шаллер

2
Ви маєте на увазі, чи існує ризик того, що сам по собі акт може спричинити проблему, чи є ризик виникнення проблемних наслідків? Якщо у вас є програми, які очікують існування папки / data, перейменування може спричинити проблеми.
Накопичення

3
Побічна примітка: майже все є безпечним, якщо ви перевірили резервні копії. Нічого не є таким безпечним, як має бути, якщо ви цього не зробите. Іншими словами: коли ви запитуєте "чи це безпечно", ваша перша думка повинна бути "чи я перевірив резервні копії?"
RedGrittyBrick

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

Відповіді:


71

Зміна імені в папці безпечно, якщо вона знаходиться в одній і тій же файловій системі.


Якщо це точка монтування ( /dataякось схоже, що це може бути точкою монтування для мене, перевірте це mount), тоді вам потрібно зробити щось інше, ніж просто, mvоскільки mv /data /BD_FILESперемістив би дані до кореневого розділу (що може бути не тим, що ти хочеш, щоб це сталося).

Вам слід відключити файлову систему, перейменувати порожній каталог, оновити /etc/fstabнове місце для цієї файлової системи та повторно встановити файлову систему в перейменованому місці.

Іншими словами,

  1. umount /data
  2. mv /data /BD_FILES(припустимо, /BD_FILESщо вже не існує; у такому випадку спочатку перемістіть його із шляху)
  3. оновлення /etc/fstab, зміна точки монтажу з /dataна/BD_FILES
  4. mount /BD_FILES

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


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

rsync -a /data/ /BD_FILES/

наприклад, але дивіться rsyncпосібник про те, що це робить, а що не робить (наприклад, не зберігає жорсткі посилання).


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


9
Існує ризик, що ви очікуєте mvпросто зробити renameсистемний дзвінок, але через обставини ніхто не зрозумів, що збирається скопіювати файли та видалити оригінал. Якщо мені потрібно бути абсолютно впевненим, просто робиться renameсистемний дзвінок, і я mvне збираюся робити щось «розумне» за моєю спиною, я відкриваю оболонку Python і використовую os.rename.
kasperd

3
За допомогою відносно недавнього ядра Linux ви можете перемістити точку монтування замість цього:mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
Девід Фоерстер,

2
@MichealJohnson Це, ймовірно, буде працювати в системі Linux, так. Акуратною річчю rsyncє те, що він перезавантажений.
Kusalananda

3
@MichealJohnson Один користується інструментами, якими користуватися найзручніше, очевидно. Так, rsync -aзберігається майже всі метадані, але не жорсткі посилання, ACL або розширені атрибути (додати -HAXдля цього).
Кусалаланда

3
@Max У різних дистрибутивах є різні renameкоманди з різною поведінкою. Я думаю, що це достатня причина, щоб не використовувати renameкоманду, коли ви хочете бути впевнені, що вона буде робити.
kasperd

16

Ви не перейменовуєте кожен файл у каталозі, ви перейменовуєте один файл у /. Це тому, що:

  1. каталоги - це файли та
  2. файлова система дійсно піклується про вкладку, а не про власне текст.

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


14

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

Якщо джерело та ціль знаходяться в різних файлових системах, дані потрібно скопіювати mv. Відмінності у функціях файлової системи, такі як максимальний розмір файлу, обмеження в іменах файлів тощо, можуть спричинити проблеми. Щоб уникнути проблем, спочатку скопіюйте файли ( cp,, rsync...) та після успішного завершення копіювання, видаліть файли в оригінальному місці.

* Однак є деякі кутові випадки, наприклад, згадані в розділі BUGS у перейменуванні man 2


> "Він або вдається, і каталог має нову назву, або не працює, і в цьому випадку нічого не змінюється". Як це гарантовано? Це правда для всіх файлових систем? Чи є документація щодо цього?
турбанов

Перейменування - це єдиний системний виклик, проте в розділі BUGS перейменування людини є примітка про NFS : перейменування може бути успішним, навіть коли помилка повертається при використанні NFS (див. Деталі на сторінці man). У відповідь я також додав замітку. Я не очікую, що будь-яка файлова система в ядрі вважатиме прийнятною для введення каталогу, якщо перейменування не вдасться.
sebasth

8

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

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

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

Команда щось подібне повинно це робити: ln -s /data /BD_FILES


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

Я віддаю перевагу щось подібне mv thing1 thing2 ; ln --symbolic ./thing2 thing1. Таким чином я отримав нову назву і легко можу перевірити відсутність старого, видаливши symlink.
can-ned_food

3

Перейменування - атомне. Єдиний розумний ризик полягає в тому, що mvвирішить скопіювати все з якихось причин, і це провалиться наполовину. Якщо у вас є GNU mv, mv -Tвилучите цей ризик.

mv -Tповідомляє, mvщо він переміщується до папки, яка не є папкою; що призведе до того, що він відмовиться робити, mkdir()що, в свою чергу, призведе до виходу з ладу при переміщенні папки, і вона вирішила скопіювати якусь причину.

Я брав участь у витрушенні помилок під mv -Tчас роботи над магістерською дисертацією років тому. Раніше це робилося неправильно на занадто багатьох крайніх корпусах.

З іншого боку, ви маєте 180 ГБ даних користувачів на кореневому розділі. Напевно, ви хочете перемістити це з кореневого розділу.


Ви не можете сказати лише від імені, чи є щось у "кореневому розділі" чи ні.
Пітер

@Peter: Якщо він не знаходиться в кореневому розділі, це точка монтажу. Не можна перейменовувати встановлені точки кріплення командою mv.
Джошуа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.