mengganti nama folder besar: apakah berisiko?

19

Apakah berisiko mengganti nama folder dengan 180GB dengan mvperintah?

Kami memiliki folder /datayang berisi 180GB.

Kami ingin mengganti nama /datafolder menjadi /BD_FILESdengan mvperintah.

Apakah aman untuk melakukan itu?

yael
sumber
14
Mengapa dan bagaimana harus berisiko? Jika Anda tidak yakin, panggilan mvdengan -ipilihan.
hidangan penutup
5
Adakah sesuatu di lingkungan Anda yang membuat Anda berpikir bahwa itu mungkin berisiko?
Jeff Schaller
2
Maksud Anda apakah ada risiko bahwa tindakan itu sendiri dapat menyebabkan masalah, atau apakah ada risiko bahwa mungkin ada efek bermasalah? Jika Anda memiliki program yang mengharapkan ada folder / data, kemudian mengubah nama itu dapat menyebabkan masalah.
Akumulasi
3
Catatan: Hampir semuanya aman jika Anda memiliki cadangan yang diverifikasi. Tidak ada yang seaman seharusnya jika Anda tidak. Dengan kata lain: ketika menanyakan "apakah ini aman", pikiran pertama Anda seharusnya adalah "sudahkah saya memverifikasi cadangan saya?"
RedGrittyBrick
2
Maksudku risiko yang bisa bermasalah ketika memindahkan folder besar dengan data oleh OS ini dapat menghentikan perpindahan di tengah misalnya atau kehilangan data
yael

Jawaban:

71

Mengubah nama pada folder aman, jika tetap dalam sistem file yang sama.


Jika itu adalah titik mount ( /datasepertinya itu bisa menjadi titik mount bagi saya, periksa ini dengan mount), maka Anda perlu melakukan sesuatu selain dari yang sederhana mvkarena mv /data /BD_FILESakan memindahkan data ke partisi root (yang mungkin bukan Anda ingin terjadi).

Anda harus meng-unmount sistem file, mengganti nama direktori yang sekarang kosong, memperbarui /etc/fstabdengan lokasi baru untuk sistem file ini, dan kemudian memasang kembali sistem file di lokasi yang diubah namanya.

Dengan kata lain,

  1. umount /data
  2. mv /data /BD_FILES(dengan asumsi /BD_FILESbelum ada, dalam hal ini, pindahkan dulu.)
  3. memperbarui /etc/fstab, mengubah titik pemasangan dari /datamenjadi/BD_FILES
  4. mount /BD_FILES

Ini tidak melibatkan menyalin file apa pun di sekitar, itu hanya mengubah nama direktori yang bertindak sebagai titik mount untuk sistem file.


Jika mengubah nama direktori melibatkan memindahkannya ke sistem file baru (yang akan terjadi jika /databerada di satu disk saat /BD_FILESberada di disk lain, hal yang umum dilakukan jika Anda memindahkan sesuatu ke partisi yang lebih besar, misalnya) , Saya merekomendasikan untuk menyalin data sambil membiarkan yang asli tetap utuh sampai Anda dapat memeriksa apakah salinannya ok. Anda dapat melakukan ini dengan

rsync -a /data/ /BD_FILES/

misalnya, tetapi lihat rsyncmanual untuk apa yang dilakukan dan tidak dilakukan (tidak mempertahankan tautan keras, misalnya).


Setelah folder diganti nama, Anda juga perlu memastikan bahwa prosedur yang ada (program dan pengguna yang menggunakan folder, cadangan dll.) Mengetahui perubahan nama.

Kusalananda
sumber
9
Ada risiko bahwa seseorang mengharapkan mvuntuk hanya melakukan renamepanggilan sistem, tetapi karena keadaan seseorang tidak menyadari itu akan menyalin file dan menghapus yang asli. Jika saya harus benar-benar yakin hanya renamepanggilan sistem dibuat dan mvtidak akan melakukan sesuatu yang "pintar" di belakang saya, saya membuka shell Python dan menggunakan os.rename.
kasperd
3
Dengan kernel Linux yang relatif baru, Anda dapat memindahkan titik mount sebagai gantinya:mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
David Foerster
2
@MichealJohnson Itu mungkin akan bekerja pada sistem Linux, ya. Yang rapi dengan rsyncitu adalah restart.
Kusalananda
3
@MichealJohnson One menggunakan alat yang paling nyaman digunakan, jelas. Ya, rsync -amempertahankan hampir semua metadata, tetapi bukan tautan keras, ACL, atau atribut yang diperluas (tambahkan -HAXuntuk itu).
Kusalananda
3
@ Max Distribusi berbeda memiliki renameperintah berbeda dengan perilaku berbeda. Saya pikir itu alasan yang cukup untuk tidak menggunakan renameperintah ketika Anda ingin memastikan apa yang akan dilakukan.
kasperd
16

Anda tidak mengganti nama setiap file di direktori, Anda mengganti nama satu file di /. Itu karena:

  1. direktori adalah file, dan
  2. sistem file benar-benar peduli tentang inode, bukan teks yang sebenarnya.

Dengan demikian, mengubah nama direktori, tidak peduli berapa banyak file atau berapa banyak data di dalamnya, sepele.

RonJohn
sumber
14

Jika Anda baru saja mengganti nama (sumber dan target dalam sistem file yang sama ), itu hanya mengubah nama entri direktori. Entah berhasil dan direktori memiliki nama baru, atau gagal dalam hal ini tidak ada yang berubah * .

Jika sumber dan target berada pada sistem file yang berbeda, data perlu disalin mv. Perbedaan fitur sistem file, seperti ukuran file maksimum, batasan nama file, dll., Dapat menyebabkan masalah. Untuk menghindari masalah, salin dulu file ( cp,rsync ...) dan setelah salin selesai, hapus file di lokasi asli.

* Namun ada beberapa kasus sudut, misalnya disebutkan di bagian BUGS di man 2 ganti nama

sebasth
sumber
> "Ini berhasil dan direktori memiliki nama baru, atau gagal dalam hal tidak ada perubahan". Bagaimana ini dijamin? Apakah benar untuk semua sistem file? Apakah ada dokumentasi tentang ini?
Turbanoff
Ganti nama adalah syscall tunggal, namun ada catatan tentang NFS di bagian BUGS dari man rename : rename dapat berhasil bahkan ketika kesalahan dikembalikan saat menggunakan NFS (lihat detail di halaman manual). Saya menambahkan catatan dalam jawaban juga. Saya tidak mengharapkan sistem file dalam kernel untuk menganggap itu dapat diterima untuk entri direktori menghilang jika nama gagal.
sebasth
8

Seperti yang orang lain katakan, mengganti nama folder tidak menimbulkan risiko yang melekat pada konten. Tetapi ada berbagai jenis risiko yang mungkin ingin Anda pertimbangkan.

Prosedur yang ada, skrip, pintasan yang ditentukan pengguna, dan konfigurasi yang merujuk pada lokasi asli dapat rusak oleh perubahan ini, dan jika jalur disimpan dalam database, misalnya, memperbarui mereka bisa menjadi pekerjaan besar.

Satu hal yang dapat Anda lakukan adalah membuat tautan simbolis untuk nama direktori baru, tetapi biarkan nama lama tetap di tempatnya untuk sementara waktu. Itu akan memberi Anda waktu untuk mengevaluasi dampak dari perubahan ini. Anda dapat menghapus sementara nama lama, melihat apakah ada masalah, dan jika ada, cukup buat ulang nama lama sehingga orang dapat terus bekerja sambil mencari tahu apa yang perlu diperbarui.

Perintah seperti ini harus melakukannya: ln -s /data /BD_FILES

panggang
sumber
4
Satu lagi risiko ringan yang belum ada yang disebutkan, adalah bahwa tergantung pada strategi cadangan Anda untuk folder itu, itu mungkin menyebabkan ruang disk dan masalah latensi pada drive cadangan karena 180GB data "baru" tiba-tiba muncul, dan perlu untuk dicadangkan.
Kent
Saya lebih suka sesuatu seperti mv thing1 thing2 ; ln --symbolic ./thing2 thing1. Dengan begitu saya mendapatkan nama baru dan dapat dengan mudah menguji tidak adanya yang lama dengan menghapus symlink.
can-ned_food
3

Ganti nama adalah atom. Satu-satunya risiko yang masuk akal adalah bahwa mvmemutuskan untuk menyalin segala sesuatu karena suatu alasan dan itu crash setengah jalan. Jika Anda memiliki GNU mv, mv -Takan menghapus risiko ini.

mv -Tmemberitahu mvbahwa itu pindah ke non-folder; yang akan menyebabkannya menolak untuk melakukan mkdir()yang pada gilirannya akan menyebabkannya gagal jika memindahkan folder dan memutuskan untuk menyalin karena suatu alasan.

Saya terlibat dalam mengguncang serangga mv -Tsaat mengerjakan tesis master saya bertahun-tahun yang lalu. Dulu melakukan hal yang salah pada terlalu banyak kasus tepi.

Di sisi lain, Anda memiliki data pengguna 180GB di partisi root. Anda mungkin ingin memindahkan ini dari partisi root.

Joshua
sumber
Anda tidak dapat mengatakan dari namanya saja jika ada sesuatu di "partisi root" atau tidak.
Peter
@ Peter: Jika tidak di partisi root, itu adalah mountpoint. Anda tidak dapat mengganti nama mountpoint yang dipasang dengan perintah mv.
Joshua