Memindahkan / var, / home ke partisi yang terpisah

59

Saya mencoba memindahkan beberapa folder (seperti /vardan /home) ke partisi terpisah setelah membaca panduan ini:

3.2.1 Pilih skema partisi cerdas

Saya berhasil memindahkan satu folder dengan mengikuti panduan ini .

Namun, sepertinya itu tidak berfungsi untuk banyak folder, dan semua folder saya dibuang ke partisi tanpa folder yang tepat.

Saya ingin me-mount /var, /homedan /tmpke partisi yang terpisah; dapatkah seseorang membimbing saya dalam hal ini?

toffee.beanns
sumber
Apakah Anda membuat partisi tambahan untuk masing-masing direktori atau hanya satu?
mreithub
@ mreithub saya ingin semua idealnya disimpan dalam partisi yang sama dan hanya bervariasi dengan folder. dengan cara itu jauh lebih sederhana bagi saya, tidak perlu khawatir tentang ruang.
toffee.beanns
1
Saya tidak menyarankan memakai /varpartisi yang terpisah. Tidak ada manfaatnya. Simpan seluruh OS di satu partisi ( /). Gunakan partisi terpisah hanya untuk hal-hal yang bukan OS - data pengguna masuk /home, spool mail (jika Anda memiliki yang besar) /var/mail, basis data dalam misalnya /var/lib/mysqlatau /srv, ...
Gilles 'SO-stop being evil'
7
@Gilles " Tidak ada manfaatnya " ?????? (Mungkin saya perlu lebih banyak tanda tanya). Tentu ada manfaatnya. Saya sebagian besar statis. / var hampir seluruhnya dinamis. Jika Anda me-mount / var pada partisi yang terpisah, Anda dapat me-mount partisi read-only. Ada banyak situasi di mana itu adalah Good Thing ™.
Auspex

Jawaban:

73

1. Pertama, Anda membutuhkan ruang yang tidak terisi untuk membuat partisi untuk setiap titik mount (/ var, / home, / tmp). Gunakan Gparted untuk ini.

2. Kemudian Anda perlu membuat sistem file untuk partisi tersebut (dapat dilakukan dengan Gparted juga) atau menggunakan:

mkfs.ext4 /dev/sdaX

misalnya untuk membuat sistem file ext4 baru di perangkat / dev / sdaX (ganti / dev / sdaX dengan perangkat Anda sendiri)

3. Pasang sistem file baru di bawah / mnt

mkdir /mnt/var        
mount /dev/sdaX /mnt/var

4. Masuk ke mode single-user sehingga tidak ada aktivitas rw di direktori selama proses

init 1

5. Masukkan kata sandi root Anda.

6. Cadangkan data dalam var saja (bukan direktori / var itu sendiri)

cd /var
cp -ax * /mnt/var

7. Ganti nama direktori / var setelah data Anda berhasil ditransfer.

cd /
mv var var.old

8. Buat direktori var baru

mkdir var

9. Lepas partisi baru.

umount /dev/sdaX

10. Remount sebagai / var

mount /dev/sdaX /var

11. Edit / etc / fstab file untuk memasukkan partisi baru, dengan / var sebagai mount point, sehingga ia akan secara otomatis di-mount saat boot.

/dev/sdaX       /var     ext4    defaults    0 0

12. Ulangi langkah 1-11 untuk / home dan / tmp.

13. Akhirnya kembali ke mode multitasking.

init 5
cioby23
sumber
ya saya sedang berpikir untuk menggunakan gparted. Terima kasih atas jawabannya. Saya berencana untuk menyisihkan 30GB ruang untuk beberapa folder ini sebenarnya / home, / tmp, / var /, / opt, / usr /, apakah Anda memiliki ukuran kasar berapa banyak yang harus saya berikan sesuai (untuk server hosting sederhana) ?
toffee.beanns
1
saya mencari menggunakan lvm, apakah itu lebih baik dibandingkan dengan gparted?
toffee.beanns
LVM adalah topik yang sangat berbeda. LVM digunakan sebagai layer untuk membuat volume logis di atas harddisk fisik. Gparted hanya alat untuk membuat volume fisik LVM.
cioby23
1
Sebenarnya, cp -ax * /mnt/varitu ide yang buruk , karena itu akan mengabaikan file / direktori tersembunyi. Lebih suka cp -ax . /mnt/var. (@ cioby23, saya pikir Anda harus memperbarui jawaban Anda)
berbt
6
Silakan tambahkan final init 5pada jawabannya.
Robert Pollak
16

Jika Anda ingin menggunakannya semua pada partisi yang sama Anda bisa menggunakan LVMatau tiga bind mount sederhana.

Untuk membuat solusi berbasis bind Anda

  1. buat partisi dengan sistem file
  2. masuk ke mode penyelamatan (pengguna tunggal masih membutuhkan beberapa folder)
  3. pasang sebagai /mnt/data
  4. Pindahkan semua folder yang ingin Anda pindahkan. Menggunakan cpdan mv dir dir.oldmungkin lebih aman, tetapi karena saya melakukan ini setelah menginstal itu tidak masalah bagi saya.

    mv /home /mnt/data/
    mv /var  /mnt/data/
    
  5. buat entri bind mount yang sesuai di fstab, misalnya yang saya punya

    UUID=01234567-89abc-def0-1234-567890abcde /mnt/data         ext4          noatime,nodiratime,relatime                           0       0
    
    # Binds
    /mnt/data/opt                             /opt              none          bind                                                  0       0
    /mnt/data/home                            /home             none          bind                                                  0       0
    /mnt/data/usr                             /usr              none          bind                                                  0       0
    
  6. reboot

Fabian
sumber
Di mount(8)halaman manual di nodiratimebawahnya tertulis: If noatime option is set, this option is not needed.Apakah ada kelebihan redundansi dalam memasukkannya?
brannerchinese
5

Saya pribadi akan menggunakan solusi bind-mount @ Fabian atau menggunakan symlink:

  1. buat /etc/fstabentri untuk partisi baru (gunakan blkiduntuk mendapatkan UUID yang tepat untuk partisi baru Anda dan jangan lupa untuk mkdir /mnt/data):

    UUID=01234567-89abc-def0-1234-567890abcde  /mnt/data  ext4  defaults  0 0
    
  2. Gunakan mount -aatau sesuatu yang mirip untuk memasang partisi baru

  3. pindahkan folder asli ke partisi baru Anda:

    mv /var /mnt/data/
    mv /home /mnt/data/
    # ... (you get the point)
    
  4. Buat symlink

    ln -s /mnt/data/var /var
    ln -s /mnt/data/home /home
    # ...
    

Walaupun metode bind-mount mungkin adalah solusi praktik terbaik, saya lebih suka yang ini karena Anda tidak berakhir dengan daftar panjang dfdan mountpartisi yang tidak perlu .

mreithub
sumber
1
Apa yang terjadi dengan masing-masing metode jika sesuatu ingin / var sebelum di-mount? Saya agak curiga bahwa metode bind akan lebih bersih, tetapi saya benar-benar tidak tahu.
Auspex
@ Auspex Seharusnya tidak ada perbedaan antara kedua metode dalam hal itu (karena afaik semua partisi lokal di /etc/fstab-mount pada saat yang sama saat boot). Sebelum /mnt/datadipasang, semua symlink Anda akan 'mati', jadi setiap upaya baca / tulis pada mereka (dan pada subdir yang tidak ada) akan gagal (dengan ENOENT jika saya ingat dengan benar). Dengan bind-mounts Anda mendapatkan hasil yang hampir sama tetapi program sebenarnya dapat menulis ke partisi root (jika mereka mencoba untuk menjadi pintar tentang direktori yang tidak ada)
mreithub
1
Ya, itu tidak sepenuhnya benar. Root di-mount terlebih dahulu, dan saya secara khusus bertanya karena saran "Read-only root" Debian menyebutkan kemungkinan proses yang ingin mengakses / var sebelum di-mount. Tetapi dalam kasus saya, di mana saya memiliki Raspberry Pi dan telah menyiapkan sistem file read-only di / (karena kartu SD terus rusak ketika daya keluar ke mesin), Anda mendorong saya bahwa metode mana pun akan bekerja . Tidak ada yang akan menulis ke sistem file root, karena itu RO, jadi setiap kasus akan menghasilkan kesalahan.
Auspex
0

Selain prosedur yang diberikan cioby23, saya juga harus melakukan:

  restorecon -R /var

agar sshd untuk memulai.

froner
sumber