Чи ризиковано перейменувати папку на 180 Гб за допомогою mv
команди?
У нас є папка, /data
яка містить 180 Гб.
Ми хочемо перейменувати /data
папку /BD_FILES
в mv
команду.
Чи безпечно це робити?
Чи ризиковано перейменувати папку на 180 Гб за допомогою mv
команди?
У нас є папка, /data
яка містить 180 Гб.
Ми хочемо перейменувати /data
папку /BD_FILES
в mv
команду.
Чи безпечно це робити?
Відповіді:
Зміна імені в папці безпечно, якщо вона знаходиться в одній і тій же файловій системі.
Якщо це точка монтування ( /data
якось схоже, що це може бути точкою монтування для мене, перевірте це mount
), тоді вам потрібно зробити щось інше, ніж просто, mv
оскільки mv /data /BD_FILES
перемістив би дані до кореневого розділу (що може бути не тим, що ти хочеш, щоб це сталося).
Вам слід відключити файлову систему, перейменувати порожній каталог, оновити /etc/fstab
нове місце для цієї файлової системи та повторно встановити файлову систему в перейменованому місці.
Іншими словами,
umount /data
mv /data /BD_FILES
(припустимо, /BD_FILES
що вже не існує; у такому випадку спочатку перемістіть його із шляху)/etc/fstab
, зміна точки монтажу з /data
на/BD_FILES
mount /BD_FILES
Це не передбачає копіювання жодних файлів навколо, це просто змінює ім'я каталогу, який виконує роль точки монтування файлової системи.
Якщо перейменування каталогу передбачає переміщення його до нової файлової системи (що було б у випадку, якщо він /data
знаходиться на одному диску, а /BD_FILES
на іншому диску, звичайне, що потрібно робити, якщо ви переміщуєте речі, наприклад, на більший розділ) , Рекомендую копіювати дані, залишаючи непошкодженими оригінал, поки ви не зможете перевірити, чи копія в порядку. Ви можете зробити це за допомогою
rsync -a /data/ /BD_FILES/
наприклад, але дивіться rsync
посібник про те, що це робить, а що не робить (наприклад, не зберігає жорсткі посилання).
Після того, як папку буде перейменовано, вам також потрібно переконатися, що існуючі процедури (програми та користувачі, які використовують папку, резервні копії тощо) знають про зміну імені.
mv
просто зробити rename
системний дзвінок, але через обставини ніхто не зрозумів, що збирається скопіювати файли та видалити оригінал. Якщо мені потрібно бути абсолютно впевненим, просто робиться rename
системний дзвінок, і я mv
не збираюся робити щось «розумне» за моєю спиною, я відкриваю оболонку Python і використовую os.rename
.
mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
rsync
є те, що він перезавантажений.
rsync -a
зберігається майже всі метадані, але не жорсткі посилання, ACL або розширені атрибути (додати -HAX
для цього).
rename
команди з різною поведінкою. Я думаю, що це достатня причина, щоб не використовувати rename
команду, коли ви хочете бути впевнені, що вона буде робити.
Ви не перейменовуєте кожен файл у каталозі, ви перейменовуєте один файл у /. Це тому, що:
Таким чином, перейменування каталогу, незалежно від того, скільки файлів чи скільки в ньому даних, є тривіальним.
Якщо ви просто перейменуєте (джерело та ціль у тій же файловій системі), це просто перейменування запису каталогу. Він або вдається, і каталог має нову назву, або не працює, і в цьому випадку нічого не змінюється * .
Якщо джерело та ціль знаходяться в різних файлових системах, дані потрібно скопіювати mv
. Відмінності у функціях файлової системи, такі як максимальний розмір файлу, обмеження в іменах файлів тощо, можуть спричинити проблеми. Щоб уникнути проблем, спочатку скопіюйте файли ( cp
,, rsync
...) та після успішного завершення копіювання, видаліть файли в оригінальному місці.
* Однак є деякі кутові випадки, наприклад, згадані в розділі BUGS у перейменуванні man 2
Як зазначають інші, перейменування папки не несе властивого вмісту. Але є різний вид ризику, який ви, можливо, захочете врахувати.
Існуючі процедури, сценарії, визначені користувачем ярлики та конфігурації, які посилаються на вихідне місце, можуть бути порушені цією зміною, і якщо шляхи зберігаються в базі даних, наприклад, їх оновлення може бути великою роботою.
Одне, що можна зробити, - це зробити символічне посилання на нове ім’я каталогу, але залишити стару назву на місці на деякий час. Це дасть вам час оцінити вплив цієї зміни. Ви можете тимчасово видалити стару назву, побачити, чи є якісь проблеми, а якщо є, просто створіть стару назву, щоб люди могли продовжувати працювати, поки ви з'ясуєте, що потрібно оновити.
Команда щось подібне повинно це робити:
ln -s /data /BD_FILES
mv thing1 thing2 ; ln --symbolic ./thing2 thing1
. Таким чином я отримав нову назву і легко можу перевірити відсутність старого, видаливши symlink.
Перейменування - атомне. Єдиний розумний ризик полягає в тому, що mv
вирішить скопіювати все з якихось причин, і це провалиться наполовину. Якщо у вас є GNU mv
, mv -T
вилучите цей ризик.
mv -T
повідомляє, mv
що він переміщується до папки, яка не є папкою; що призведе до того, що він відмовиться робити, mkdir()
що, в свою чергу, призведе до виходу з ладу при переміщенні папки, і вона вирішила скопіювати якусь причину.
Я брав участь у витрушенні помилок під mv -T
час роботи над магістерською дисертацією років тому. Раніше це робилося неправильно на занадто багатьох крайніх корпусах.
З іншого боку, ви маєте 180 ГБ даних користувачів на кореневому розділі. Напевно, ви хочете перемістити це з кореневого розділу.
mv
допомогою цієї-i
опції.