Bagaimana cara memindahkan / usr ke partisi baru?

26

/usrFolder saya perlu dipindahkan ke partisi baru. Bagaimana saya bisa melakukan ini tanpa menghapus isinya?

Apakah ini dapat dilakukan saat Ubuntu sedang berjalan, atau apakah saya perlu menggunakan LiveCD untuk ini?

Nathan Osman
sumber

Jawaban:

27

Akan lebih aman menggunakan Live CD, tetapi Anda bisa melakukannya:

  • salin semua file ke partisi baru, pastikan konten /usrtidak berubah saat Anda melakukan ini.
  • sunting /etc/fstabsehingga /usrakan dipasang pada reboot berikutnya
  • reboot
  • hapus file-file lama

Lihat di bawah untuk detail pada setiap langkah.

Perhatikan bahwa Anda tidak dapat memasang partisi baru /usrsaat menjalankan karena akan ada banyak file di dalamnya /usryang akan terbuka.

Menyalin file

Saya akan menggunakan cp -a. -aadalah opsi arsip. Dari halaman manual :

-a, --archive
          same as -dR --preserve=all
...
-d     same as --no-dereference --preserve=links
...
-P, --no-dereference
          never follow symbolic links in SOURCE
...
--preserve[=ATTR_LIST]
          preserve      the      specified      attributes       (default:
          mode,ownership,timestamps),  if  possible additional attributes:
          context, links, xattr, all
...
-R, -r, --recursive
          copy directories recursively

Mengedit / etc / fstab

Anda perlu mengetahui UUID dari partisi baru Anda. Anda dapat melihat pemetaan dengan melakukan:

$ ls -l /dev/disk/by-uuid/

Dan kemudian tambahkan baris ini ke /etc/fstab:

UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2

Ubah UUID menjadi UUID Anda, dan ubah ext4menjadi tipe sistem file yang Anda gunakan - Anda harus mengetahui hal ini jika telah menyiapkan partisi.

Hapus file lama

Setelah reboot, file lama di /usrpartisi root akan disembunyikan oleh partisi baru yang terpasang /usr. Tapi kita bisa menggunakan beberapa tipuan mount bind untuk mendapatkan file-file lama dan kemudian menghapusnya.

$ sudo mount --bind / /mnt
$ sudo rm -rf /mnt/usr/*
$ sudo umount /mnt

Tetapi sedikit kesalahan ketik (misalnya, menekan Enter ketika Anda hanya mengetik sudo rm -rf /mnt) dapat menyebabkan bencana, jadi saya hanya akan menggunakan metode ini jika Anda sangat percaya diri dengan apa yang Anda lakukan, benar-benar tidak dapat menangani downtime, atau tidak memiliki akses fisik ke mesin dan karenanya tidak dapat mem-boot CD langsung atau stik USB langsung.

Hamish Downer
sumber
4
rsyncjauh lebih cocok untuk ini daripadacp
Marco Ceppi
1
@MarcoCeppi Bisakah Anda mengembangkannya? Mungkin memberikan varian jawaban yang menggunakan rsyncbukan?
Kazark
6
Ganti perintah cp dengan rsync -avz. Rsync memungkinkan Anda untuk memulai kembali salinan dan umumnya harus digunakan saat berpindah antar partisi, memblokir perangkat, atau mesin.
Marco Ceppi
2
JANGAN gunakan cp. Itu tidak menyimpan KERAS KERAS. Ini akan merusak pembaruan paket di masa mendatang. Misalnya /usr/bin/s2pdan /usr/bin/psedfile yang sama. Pindah dengan cpakan membuat 2 versi independen file itu. Lakukan rsync -aHsebaliknya.
oᴉɹǝɥɔ
1
Pertama-tama, lewati tanda -z - ini memungkinkan kompresi, karena Anda tidak mengirim file melalui jaringan adalah overhead yang tidak berguna (kecuali bahwa rsync biasanya cukup pintar untuk mengabaikannya, tetapi masih, mungkin juga menjatuhkannya) . @ AleksandarStefanović Anda pasti ingin konten di sana, bukan folder, dan alasan itu terjadi karena beberapa kebiasaan rsync: itu memperlakukan rsync -avH a/ bberbeda dari rsync -avH a b, menyalin isi folder a(yaitu, a/*) dalam kasus pertama dan folder itu sendiri di yang kedua. Pastikan Anda menggunakan garis miring di sini.
Darael
7

Karena sebagian besar pustaka yang digunakan berada di / usr, saya tidak akan merekomendasikan untuk memindahkan direktori ini saat menjalankan Ubuntu. Bahkan, Anda mungkin mendapatkan pesan kesalahan ketika Anda mencoba melakukan ini. Karenanya, yang terbaik adalah menggunakan LiveCD.

Anda dapat menggunakan beberapa kemungkinan untuk memindahkan / menyalin file cp, rsync dll. Anda ingin memastikan bahwa semua symlink dibuat dan tidak hanya disalin. cp dan rsync keduanya memiliki opsi untuk ini.

Setelah memindahkan file ke partisi lain, Anda perlu menambahkan mount lain di / etc / fstab untuk me-mount partisi baru ke / usr.

txwikinger
sumber
2

Perhatian: Saya tidak tahu apa yang saya lakukan, saya hanya menyalin perintah dan melakukan seperti yang disarankan oleh yang lain. Ini mungkin cara yang salah untuk melakukannya, tetapi itu bekerja untuk saya (untuk saat ini, setidaknya).

Beginilah cara saya melakukannya (mengikuti jawaban Hamish dan komentarnya):

  1. Salin semua file partisi yang baru dibuat (ganti dengan lokasi partisi Anda, seharusnya terlihat seperti milik saya):

    rsync -avz /usr /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c 
    
  2. Pada titik ini saya menyadari bahwa ini menyalin semua ke /usrfolder pada partisi, yang tidak akan berfungsi , jadi saya menyalin semuanya (dengan manajer file) dari folder itu ke root partisi, dan yang dihapus itu kosong folder sesudahnya.

  3. Sunting /etc/fstab(sama seperti dalam jawaban Hamish, tentu saja, ganti dengan UUID Anda)

    UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2
    
  4. Langkah yang ternyata tidak terlalu bijak: Saya mengubah nama /usrpartisi yang saat ini dipasang /usrBACKUP, hanya supaya saya tahu bahwa, ketika saya reboot sistem, sebenarnya reboot ke partisi yang baru dibuat, dan bukan yang lama. . Setelah itu, semuanya bermasalah di layar, dan saya harus mematikannya dengan menekan lama tombol daya (genius seperti saya) . Lewati langkah ini jika Anda tidak ingin memperbaiki sistem Anda.

  5. Mulai ulang sistem

  6. Setelah reboot, buka System Monitor atau aplikasi serupa untuk melihat apakah /usrpartisi baru Anda sudah terpasang, dan untuk memeriksa apakah semuanya berjalan sesuai rencana.

  7. Setelah memeriksa apakah semuanya baik-baik saja, Anda dapat menghapus /usrpartisi lama Anda . Aku akan menyimpan milikku untuk berjaga-jaga kalau-kalau terjadi kesalahan.

Aleksandar Stefanović
sumber
Mengapa menjawab pertanyaan 5 tahun jika sudah memiliki jawaban yang diterima dan Anda tidak tahu apa yang Anda bicarakan?
cmks
2
@ cmks karena saya merasa jawaban lain tidak lengkap - saya tidak mendapatkan solusi lengkap dari satu jawaban, dan tidak ada jawaban yang tidak memiliki cukup detail untuknya. Saya merasa pengguna yang akan datang ke pertanyaan ini perlu bantuan. Tidak masalah jika sudah berusia lima tahun jika seseorang masih membutuhkan informasi dari pertanyaan ini.
Aleksandar Stefanović
1
Mengapa semua orang me-reboot sistem mereka? Bukankah seharusnya a sudo mount -amembiarkannya terus berjalan?
Hagen von Eitzen
@Hagen Saya kira itu hanya untuk ukuran yang baik
Aleksandar Stefanović