zmiana nazwy dużego folderu: czy jest to ryzykowne?

19

Czy zmiana nazwy folderu zawierającego 180 GB za pomocą mvpolecenia jest ryzykowna ?

Mamy folder /datazawierający 180 GB.

Chcemy zmienić nazwę /datafolderu /BD_FILESna mvpolecenie.

Czy to jest bezpieczne?

Yael
źródło
14
Dlaczego i jak powinno to być ryzykowne? Jeśli nie masz pewności, zadzwoń mvz -iopcją.
deser
5
Czy w twoim otoczeniu jest coś, co sprawia, że ​​myślisz, że może to być ryzykowne?
Jeff Schaller
2
Czy masz na myśli, czy istnieje ryzyko, że czyn sam w sobie może spowodować problem, czy może istnieje ryzyko wystąpienia problematycznych skutków? Jeśli masz jakieś programy, które oczekują, że będzie tam folder / data, zmiana jego nazwy może spowodować problemy.
Accumumulation 24.09.17
3
Uwaga dodatkowa: Prawie wszystko jest bezpieczne, jeśli masz zweryfikowane kopie zapasowe. Nic nie jest tak bezpieczne, jak powinno być, jeśli tego nie zrobisz. Innymi słowy: kiedy pytasz „czy to jest bezpieczne”, pierwszą myślą powinno być „czy zweryfikowałem swoje kopie zapasowe?”
RedGrittyBrick
2
To znaczy, że ryzyko może być problematyczne, gdy porusza ogromny folderu z danymi Tego OS mógł zatrzymać poruszający się w środku lub na przykład luźne danych
Yael

Odpowiedzi:

71

Zmiana nazwy folderu jest bezpieczna, jeśli pozostaje on w tym samym systemie plików.


Jeśli jest to punkt montowania ( /datawygląda mi na to, że może to być punkt montowania, sprawdź to za pomocą mount), musisz zrobić coś innego niż zwykłe, mvponieważ mv /data /BD_FILESprzeniesie dane na partycję root (co może nie być tym, co chcesz się zdarzyć).

Należy odmontować system plików, zmienić nazwę teraz pustego katalogu, zaktualizować /etc/fstabprzy użyciu nowej lokalizacji dla tego systemu plików, a następnie ponownie zamontować system plików w lokalizacji o zmienionej nazwie.

Innymi słowy,

  1. umount /data
  2. mv /data /BD_FILES(zakładając, /BD_FILESże jeszcze nie istnieje, w takim przypadku najpierw usuń go z drogi)
  3. aktualizacja /etc/fstab, zmiana punktu montowania z /datana/BD_FILES
  4. mount /BD_FILES

Nie wiąże się to z kopiowaniem żadnych plików, zmienia jedynie nazwę katalogu, który działa jako punkt podłączenia systemu plików.


Jeśli zmiana nazwy katalogu wiąże się z przeniesieniem go do nowego systemu plików (tak byłoby w przypadku, gdy /dataznajduje się on na jednym dysku, podczas gdy /BD_FILESznajduje się on na innym dysku, często należy na przykład przenosić rzeczy na większą partycję) , Zaleciłbym skopiowanie danych, pozostawiając nienaruszony oryginał, dopóki nie sprawdzisz, czy kopia jest w porządku. Możesz to zrobić za pomocą

rsync -a /data/ /BD_FILES/

na przykład, ale zapoznaj się z rsyncinstrukcją dotyczącą tego, co robi i czego nie robi (na przykład nie zachowuje twardych linków).


Po zmianie nazwy folderu należy również upewnić się, że istniejące procedury (programy i użytkownicy korzystający z folderu, kopie zapasowe itp.) Są świadomi zmiany nazwy.

Kusalananda
źródło
9
Istnieje ryzyko, że ktoś mvpo prostu wykona renamewywołanie systemowe, ale z powodu okoliczności nie zdaje sobie sprawy, że zamierza skopiować pliki i usunąć oryginał. Jeśli muszę być absolutnie pewien, że wykonywane jest tylko renamewywołanie systemowe i mvnie zrobię czegoś „sprytnego” za moimi plecami, otwieram powłokę Pythona i używam os.rename.
kasperd
3
Za pomocą stosunkowo nowego jądra Linuksa możesz zamiast tego przenieść punkt montowania:mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
David Foerster,
2
@MichealJohnson To prawdopodobnie będzie działać w systemie Linux, tak. Schludny rzecz ze rsyncjest to, że restartowalne.
Kusalananda
3
@MichealJohnson One używa narzędzi, z których najwygodniej jest korzystać, oczywiście. Tak, rsync -azachowuje prawie wszystkie metadane, ale nie twarde linki, listy ACL lub rozszerzone atrybuty (dodaj -HAXdo tego).
Kusalananda
3
@Max Różne dystrybucje mają różne renamepolecenia o różnych zachowaniach. Myślę, że to wystarczający powód, aby nie używać renamepolecenia, gdy chcesz mieć pewność, co zamierza zrobić.
kasperd
16

Nie zmieniasz nazwy każdego pliku w katalogu, zmieniasz nazwę jednego pliku w /. To jest ponieważ:

  1. katalogi to pliki i
  2. system plików naprawdę dba o i-węzeł, a nie o sam tekst.

Dlatego zmiana nazwy katalogu, bez względu na liczbę plików i ilość zawartych w nim danych, jest banalna.

RonJohn
źródło
14

Jeśli zmienisz tylko nazwę (źródło i cel w tym samym systemie plików), będzie to po prostu zmiana nazwy pozycji katalogu. To się powiedzie, a katalog ma nową nazwę, lub zawiedzie, w którym to przypadku nic się nie zmienia * .

Jeśli źródło i cel znajdują się w różnych systemach plików, dane muszą zostać skopiowane przez mv. Różnice w funkcjach systemu plików, takie jak maksymalny rozmiar pliku, ograniczenia nazw plików itp., Mogą powodować problemy. Aby uniknąć problemów, należy najpierw skopiować pliki ( cp, rsync...) i po pomyślnym zakończeniu kopiowania, usuń pliki w oryginalnej lokalizacji.

* Jednak istnieją pewne przypadki narożne, na przykład wspomniane w sekcji BŁĘDY w zmianie nazwy man 2

sebasth
źródło
> „Albo się powiedzie i katalog ma nową nazwę, albo się nie powiedzie, w którym to przypadku nic się nie zmienia”. Jak to jest gwarantowane? Czy to prawda dla wszystkich systemów plików? Czy jest na to jakaś dokumentacja?
turbanoff,
Zmiana nazwy jest pojedynczym wywołaniem systemowym, jednak w sekcji BŁĘDY zmiany nazwy człowieka znajduje się uwaga na temat NFS : zmiana nazwy może się powieść nawet po zwróceniu błędu podczas korzystania z NFS (zobacz szczegóły na stronie manuala). W odpowiedzi dodałem także notatkę. Nie oczekuję, aby jakikolwiek system plików w jądrze uznał, że akceptacja pozycji katalogu zniknie, jeśli zmiana nazwy nie powiedzie się.
sebasth
8

Jak powiedzieli inni, zmiana nazwy folderu nie stanowi nieodłącznego zagrożenia dla zawartości. Istnieje jednak inne ryzyko, które warto rozważyć.

Istniejące procedury, skrypty, skróty zdefiniowane przez użytkownika i konfiguracje, które odnoszą się do pierwotnej lokalizacji, mogą zostać zerwane przez tę zmianę, a jeśli ścieżki są przechowywane w bazie danych, na przykład ich aktualizacja może być dużym zadaniem.

Jedną z rzeczy, które możesz zrobić, jest utworzenie dowiązania symbolicznego do nowej nazwy katalogu, ale pozostaw na chwilę starą nazwę. To da ci czas na ocenę wpływu tej zmiany. Możesz tymczasowo usunąć starą nazwę, sprawdzić, czy są jakieś problemy, a jeśli tak, po prostu odtwórz starą nazwę, aby ludzie mogli kontynuować pracę, podczas gdy ty zastanawiasz się, co należy zaktualizować.

Polecenie coś takiego powinno to zrobić: ln -s /data /BD_FILES

grill
źródło
4
Jeszcze jednym łagodnym ryzykiem, o którym nikt jeszcze nie wspominał, jest to, że w zależności od strategii tworzenia kopii zapasowej dla tego folderu, może to prowadzić do problemów z miejscem na dysku i opóźnieniami na dysku kopii zapasowej ze względu na nagle pojawienie się 180 GB „nowych” danych i konieczność mieć kopię zapasową.
Kent,
Wolę coś takiego mv thing1 thing2 ; ln --symbolic ./thing2 thing1. W ten sposób mam nową nazwę i mogę łatwo przetestować brak starej, usuwając dowiązanie symboliczne.
can-ned_food
3

Zmień nazwę na atomową. Jedynym uzasadnionym ryzykiem jest to, że mvz jakiegoś powodu decyduje się skopiować wszystko, co powoduje awarię w połowie. Jeśli masz GNU mv, mv -Tusuniesz to ryzyko.

mv -Tinformuje mv, że przenosi się do folderu innego niż folder; co spowoduje, że odmówi zrobienia, mkdir()co z kolei spowoduje awarię podczas przenoszenia folderu i z jakiegoś powodu postanowił skopiować.

Wiele mv -Tlat temu brałem udział w usuwaniu błędów podczas pracy nad pracą magisterską. Robił to źle w zbyt wielu przypadkach na krawędzi.

Z drugiej strony masz 180 GB danych użytkownika na partycji głównej. Prawdopodobnie chcesz to przenieść z partycji głównej.

Jozuego
źródło
Nie możesz określić z samej nazwy, czy coś znajduje się na „partycji głównej”, czy nie.
Peter
@Peter: Jeśli nie ma go na partycji głównej, jest to punkt montowania. Nie można zmienić nazwy zamontowanych punktów montowania za pomocą komendy mv.
Joshua