Bagaimana cara menggabungkan dua volume logis yang berada pada volume fisik tunggal dalam LVM?

14

Saya memiliki dua volume logis, satu di-mount sebagai /, yang lain di-mount sebagai / home.

Saya ingin menggabungkan mereka, karena /volumenya terus-menerus kehabisan ruang. (Ya, saya tahu apa yang menggunakan semua ruang itu; tidak, saya tidak bisa menghapusnya.)

Saya bersedia menurunkan mesin selama satu atau dua hari untuk melakukannya.

OS: Linux xxxxx 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux(CentOS)

Nick ODell
sumber
1
Mengapa tidak hanya meningkatkan /volume, bukankah itu gunanya menggunakan LVM?
jasonwryan
2
@jasonwryan Mengapa saya harus menyesuaikan secara manual bagaimana ruang disk dialokasikan? Bukankah itu inti dari sebuah sistem file?
Nick ODell
@NickODell No. Jika satu volume terlalu kecil untuk menampung data, maka itu terlalu kecil. Kapasitas keseluruhan adalah faktor ukuran volume, bukan ukuran sistem file. Volume logis memang memudahkan untuk mengubah ukuran volume yang dipasang dan untuk menggabungkan sumber daya penyimpanan yang berbeda menjadi satu volume. Dengan LVM Anda harus dapat melakukan apa yang disarankan jasonwryan tanpa me-reboot: pastikan pengguna biasa log-off (untuk membebaskan / home) umount / home lvreduce it (jangan lupa -r) pasang kembali lalu lakukan lvextend pada sistem file root dan Anda selesai. Jika Anda ingin bergabung, Anda harus melakukan rsync.
Bratchley
@ JoelDavis Jika saya mengharuskan semua pengguna untuk logout, apakah relevan apakah perlu saya reboot?
Nick ODell
@Naik, Baik Um ... ya? Sebagian besar sistem linux adalah server, Anda harus menyadari bahwa itu akan menjadi asumsi orang kecuali Anda mengatakan sebaliknya.
Bratchley

Jawaban:

9

Saya sudah selesai, dan partisi ulang bekerja. Namun, karena ada area yang hilang di kedua panduan, saya akan meringkas apa yang saya lakukan. Harap perhatikan bahwa saya telah mengganti nama pengguna saya dengan zzzznama komputer saya xxxxxxx. Selain itu, semua perintah harus dijalankan sebagai root kecuali jika dinyatakan lain.

Pertama, saya membuat cadangan:

tar -zcvf /media/e14be279-8c11-450a-b52c-1493cff3c632/xxxxxxx-home.tar.gz --exclude=/home/zzzz/Downloads /home

Ini menciptakan cadangan terkompresi dari direktori / home, dan meletakkannya di drive eksternal saya. (Perhatikan bahwa drive eksternal Anda akan memiliki jalur yang berbeda.)

Sekarang, Anda perlu reboot ke mode single-user.

reboot

Ketika komputer Anda menyala lagi, Anda perlu mencari layar seperti ini:

Booting Centos 2.6.32-279.22.1.el6.x86_64 in 3 seconds...

Tekan tombol apa saja untuk menghentikannya. Anda akan melihat layar seperti ini:

grub boot centos Tekan a, lalu Spasi, lalu ketik single. Tekan enter.

Anda akan melihat prompt seperti ini:

 [root@xxxxxxx /] # 

Masukkan perintah berikut:

df -h

Ini harus menunjukkan Anda Size, Useddan Avail. Kami tertarik Used.
Tulis berapa banyak ruang yang digunakan oleh volume rumah Anda. Kami akan membutuhkannya nanti.

umount /home
e2fsck -f /dev/mapper/vg_xxxxxxx-lv_home

Ingat berapa banyak ruang yang digunakan volume rumah Anda? Gandakan itu, dan berikan untuk perintah ini. Sebagai contoh, saya memiliki 15 gigabyte yang digunakan oleh direktori home saya, jadi saya mengukurnya hingga 30 gigabytes.

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

Peringatan : Langkah selanjutnya ini adalah salah satu yang bisa kehilangan data. Membuat yakin bahwa Anda masukkan ke dalam ukuran yang lebih besar dari perintah sebelumnya. Tambahkan 5 Gigabytes untuk memastikan.

lvresize -L 35G vg_xxxxxxx/lv_home

Beri tahu partisi root untuk menggunakan semua ruang yang baru saja kita bebaskan.

lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

Salin data Anda ke partisi root

mount -t ext4 /dev/mapper/vg_xxxxxxx-lv_home /mnt/home
ls /mnt/home
cp -a /mnt/home/. /home/

(Ngomong-ngomong, itu -apenting, karena kalau tidak semuanya akan dimiliki oleh root, dan Anda tidak menginginkannya.)
Lakukan pemeriksaan cepat apakah data disalin dengan benar:

ls -lR /home

Sekarang kita hapus partisi home, dan beri tahu root untuk mengambil ruang baru lagi.

umount /mnt/home
lvremove /dev/mapper/vg_xxxxxxx-lv_home
lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

Pada titik ini, saya membuat kesalahan besar, yang bisa Anda pelajari. Saya reboot, dan ketika sistem kembali, ia menolak me-mount partisi root saya sebagai baca-tulis karena tidak bisa me-mount partisi home / saya. Jadi, sebelum kita reboot, kita ketik

nano /etc/fstab

Salah satu baris itu akan memberitahu sistem untuk me-mount partisi / home. Letakkan #sebelum itu. Tekan Ctrl-O, Enter, Ctrl-X. Sekarang kamu bisa reboot.

(Secara hipotesis, jika Anda lupa mengedit fstab seperti yang saya lakukan, perintah untuk me-mount partisi root Anda adalah mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /)

Nick ODell
sumber
suka detailnya!
nmr
Saya mengalami masalah yang sama, tetapi saya tidak memiliki akses fisik ke mesin. Apakah ada cara untuk melakukan ini yang tidak mengharuskan boot ke mode pengguna tunggal?
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner Secara teoritis, ya. Jika Anda memiliki akses ssh, Anda dapat mencadangkan /home. Kemudian, selama Anda dapat meng-unmount /home, Anda dapat menghapusnya. Namun, saya tidak benar-benar memenuhi syarat untuk berbicara Anda melalui proses. Ini adalah sesuatu yang harus Anda ajukan pertanyaan baru.
Nick ODell
1
@NickODell: Saya memang mengajukan pertanyaan baru: askubuntu.com/questions/1115913/…
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner Itu saran yang jauh lebih baik daripada yang bisa saya berikan kepada Anda.
Nick ODell
3

PERINGATAN: Cadangkan semua data penting sebelum melakukan apa pun!

Anda perlu memindahkan semua data dari partisi / home ke partisi lain, partisi lokal atau drive eksternal atau di mana pun tempat lain Anda memiliki cukup ruang.

Hapus / home lv dan kemudian rentangkan / (root) lv

Salin data kembali ke direktori / home

Edit 1

Jawaban di atas adalah dengan asumsi Anda tidak memiliki cukup ruang di partisi root untuk menempatkan data di partisi home.

Jika tidak demikian, pasang saja partisi home di tempat lain dan salin datanya, misalnya:

umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/

Kemudian hapus saja partisi home dan perluas partisi root

ghm1014
sumber
3

Anda dapat melakukannya tanpa penyimpanan eksternal, lari dari /, tetapi Anda harus melepasnya /home.

Ini bukan prosedur yang sangat berisiko jika Anda berhati-hati, tetapi meskipun demikian, saran standar berlaku: melakukan pencadangan terlebih dahulu, dan mengujinya.

Saya akan menggunakan foountuk nama grup volume, dan rootdan homesebagai nama volume logis. Ini membuat jalur volume logis foo/rootdan foo/home, dan jalur perangkat /dev/mapper/foo-rootdan /dev/mapper/foo-home. Saya berasumsi bahwa mereka berada di grup volume yang sama, jika tidak, ini akan menjadi lebih rumit dan tergantung pada tata letak volume fisik dari dua grup volume.

Pertama, unmount /homedan jalankan e2fsck -f /dev/mapper/foo-home. Kemudian menyusutkan sistem file terlebih dahulu, dan volume logis yang sesuai. Jalankan di resize2fs /dev/mapper/foo-home NNNNmana NNNN adalah jumlah blok yang ingin Anda pertahankan di dalam volume (Anda bisa menggunakan kB atau MB atau GB sebagai gantinya dengan akhiran K, Matau G). Setelah menyusut filesystem, mengecilkan volume logis dengan lvresize -L MMMM foo/homemana MMMM adalah jumlah megabyte (catatan bahwa unit default adalah berbeda dari resize2fs, tetapi Anda dapat menggunakan akhiran yang sama K, M, G). Berhati-hatilah untuk tidak menyusutkan volume logis lebih jauh dari filesystem - ini adalah langkah berbahaya dalam prosedur ini.

Sekarang ada ruang yang tidak digunakan dalam grup volume. Jalankan lvresize -l +100%FREE foo/rootuntuk membuat volume root mengambil semua ruang kosong di grup volume. Kemudian jalankan resize2fs /dev/mapper/foo-root(tanpa parameter ukuran) untuk memperbesar sistem file untuk menjangkau seluruh volume logis; memperbesar bisa dilakukan saat volume sudah terpasang.

Anda sekarang memiliki ruang untuk menyalin beberapa file. Jika Anda tidak memiliki cukup ruang untuk semuanya, gerakkan sebanyak mungkin, lalu ulangi prosedurnya.

Setelah Anda menyalin semua file dari /home, Anda siap untuk menghancurkannya. Pastikan /homekosong (jika Anda memindahkan file) atau bahwa semua file /hometelah disalin ke /root(jika Anda menyalin file). Untuk menghancurkan volume logis yang sekarang tidak dibutuhkan, jalankan lvremove foo/home. Akhirnya, memperbesar volume root dengan lvresize -l 0%FREE foo/rootdan sistem berkasnya dengan resize2fs /dev/mapper/foo-home.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Catatan: / home menolak untuk meng-unmount sampai saya reboot ke mode single-user.
Nick ODell
Catatan: Ini disebut sebagai vg_ (nama mesin) dan lv_home
Nick ODell
Ok, saya membuatnya bekerja. Ada beberapa detail yang hilang dari panduan ini, jadi saya akan segera memposting riwayat perintah lengkap saya.
Nick ODell
2

Oke, saya menemukan diri saya dalam posisi yang persis sama. Tampaknya CentOS membuat volume root kecil secara default dan mengisi sisa ruang Anda dengan /home. Saya bahkan menguji pengaturan saya terlebih dahulu dalam VM tetapi dengan disk yang lebih kecil CentOS tidak membuat volume rumah. Saya mengambil masalah ini sebelum menjadi ruang dibatasi tho 'dan juga memikirkan bagaimana tidak harus masuk ke mode pengguna tunggal. Sebagai berikut:

Dapatkan akses ke mesin, ssh baik-baik saja (dengan asumsi pengguna non-root).

  1. cd / jadi kamu tidak ada di direktori home
  2. sudo -s kami akan menjadi root untuk semua ini
  3. lsof /home pastikan tidak ada yang menggunakan volume rumah, seharusnya tidak
  4. mv,, taratau serupa dengan isi rumah ke tempat lain
  5. lvremove centos/home
  6. Edit /etc/fstabdan komentar atau hapus baris untuk/home
  7. Pindahkan konten rumah yang Anda cadangkan sebelum kembali ke /home- Anda sekarang pada posisi yang aman, reboot di sini seharusnya OK
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root pada CentOS 7, orang lain mungkin menggunakan resize2fs
  10. df -h sudahkah anda berhasil

Semoga ini memudahkan seseorang. Sungguh menakjubkan apa yang dapat Anda lakukan secara langsung pada sistem file hari ini.

Damon Maria
sumber
Ini jelas lebih mudah jika Anda tidak perlu melakukan migrasi data apa pun. :)
Nick ODell