การย้าย / var, / home ไปยังพาร์ติชันแยกกัน


59

ฉันพยายามย้ายบางโฟลเดอร์ (เช่น/varและ/home) ไปยังพาร์ติชันแยกต่างหากหลังจากอ่านคู่มือนี้:

3.2.1 เลือกโครงร่างพาร์ติชันที่ชาญฉลาด

ฉันก็สามารถที่จะย้ายโฟลเดอร์หนึ่งที่ประสบความสำเร็จต่อไปนี้คู่มือ

อย่างไรก็ตามดูเหมือนจะใช้งานไม่ได้กับหลาย ๆ โฟลเดอร์และโฟลเดอร์ทั้งหมดของฉันถูกเทลงในพาร์ติชั่นโดยไม่มีโฟลเดอร์ที่เหมาะสม

ผมอยากจะติด/var, /homeและ/tmpบนพาร์ติชันที่แยกเป็นสัดส่วน ใครสามารถแนะนำฉันเกี่ยวกับเรื่องนี้?


คุณสร้างพาร์ติชันพิเศษสำหรับแต่ละไดเรกทอรีหรือเพียงพาร์ทิชันเดียวหรือไม่
mreithub

@mithithub ฉันอยากจะเก็บไว้ทั้งหมดในพาร์ทิชันเดียวกันและแตกต่างกันไปตามโฟลเดอร์ ด้วยวิธีนี้มันง่ายกว่ามากสำหรับฉันโดยไม่ต้องกังวลเกี่ยวกับพื้นที่
toffee.beanns

1
ฉันไม่แนะนำให้วาง/varพาร์ติชันแยกต่างหาก ไม่มีประโยชน์อะไรเลย รักษาระบบปฏิบัติการทั้งหมดไว้ในพาร์ติชันเดียว ( /) ใช้พาร์ติชันแยกต่างหากสำหรับสิ่งต่าง ๆ ที่ไม่ใช่ระบบปฏิบัติการ - ข้อมูลผู้ใช้/home, สปูลจดหมาย (ถ้าคุณมีขนาดใหญ่) ใน/var/mail, ฐานข้อมูลเช่น/var/lib/mysqlหรือ/srv...
Gilles

7
@Gilles " ไม่มีประโยชน์กับมัน " ?????? (ฉันอาจต้องการเครื่องหมายคำถามเพิ่มเติม) แน่นอนมีประโยชน์กับมัน / ส่วนใหญ่เป็นแบบคงที่ / var เป็นไดนามิกเกือบทั้งหมด หากคุณเมาท์ / var บนพาร์ติชันแยกต่างหากคุณสามารถเมาต์พาร์ติชันแบบอ่านอย่างเดียว มีหลายสถานการณ์ที่เป็นสิ่งที่ดี
Auspex

คำตอบ:


73

1. ขั้นแรกคุณต้องมีพื้นที่ที่ไม่ได้ปันส่วนเพื่อสร้างพาร์ติชันสำหรับแต่ละเมานต์ (/ var, / home, / tmp) ใช้ Gparted สำหรับสิ่งนี้

2. จากนั้นคุณต้องสร้างระบบไฟล์สำหรับพาร์ติชันเหล่านั้น (สามารถทำได้ด้วย Gparted ด้วย) หรือใช้:

mkfs.ext4 /dev/sdaX

ตัวอย่างเช่นการสร้างระบบไฟล์ ext4 ใหม่บนอุปกรณ์ / dev / sdaX (แทนที่ / dev / sdaX ด้วยอุปกรณ์ของคุณเอง)

3. เมาท์ระบบไฟล์ใหม่ภายใต้ / mnt

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

4. ไปที่โหมดผู้ใช้คนเดียวเพื่อไม่ให้มีกิจกรรม rw ในไดเรกทอรีระหว่างกระบวนการ

init 1

5. ป้อนรหัสผ่านรูทของคุณ

6. ข้อมูลสำรองใน var เท่านั้น (ไม่ใช่ไดเร็กทอรี / var เอง)

cd /var
cp -ax * /mnt/var

7. เปลี่ยนชื่อไดเรกทอรี / var หลังจากถ่ายโอนข้อมูลเรียบร้อยแล้ว

cd /
mv var var.old

8. สร้างไดเรกทอรี var ใหม่

mkdir var

9. ถอนติดตั้งพาร์ติชันใหม่

umount /dev/sdaX

10. ให้นับใหม่เป็น / var

mount /dev/sdaX /var

11. แก้ไขไฟล์ / etc / fstab เพื่อรวมพาร์ติชั่นใหม่โดยที่ / var เป็นจุดเชื่อมต่อเพื่อที่จะติดตั้งอัตโนมัติเมื่อบูท

/dev/sdaX       /var     ext4    defaults    0 0

12. ทำซ้ำขั้นตอนที่ 1-11 สำหรับ / home และ / tmp

13. ในที่สุดก็กลับไปที่โหมดมัลติทาสก์

init 5

ใช่ฉันคิดว่าจะใช้ gparted ขอบคุณสำหรับคำตอบ. ฉันวางแผนที่จะจัดสรรพื้นที่ 30GB สำหรับโฟลเดอร์เหล่านี้จริง ๆ / home, / tmp, / var /, / opt, / usr /, คุณมีมาตรวัดคร่าวๆของเท่าใดฉันควรให้ตาม (สำหรับเซิร์ฟเวอร์โฮสต์ง่าย) ?
toffee.beanns

1
ฉันเงยหน้าขึ้นมองการใช้ LVM ที่จะดีกว่าเมื่อเทียบกับ gparted?
toffee.beanns

LVM เป็นหัวข้อที่แตกต่างอย่างสิ้นเชิง LVM ถูกใช้เป็นเลเยอร์เพื่อสร้างโลจิคัลวอลุ่มที่ด้านบนของฟิสิคัลฮาร์ดดิสก์ Gparted เป็นเครื่องมือสำหรับสร้างฟิสิคัลวอลุ่ม LVM เท่านั้น
cioby23

1
ที่จริงแล้วcp -ax * /mnt/varมันเป็นความคิดที่ไม่ดีเพราะมันจะไม่สนใจไฟล์ / dirs ที่ซ่อนอยู่ cp -ax . /mnt/varชอบ (@ cioby23 ผมคิดว่าคุณควรจะปรับปรุงคำตอบของคุณ)
berbt

6
โปรดเพิ่มinit 5คำตอบสุดท้าย
Robert Pollak

16

หากคุณต้องการใช้ทั้งหมดในพาร์ติชันเดียวกันคุณสามารถใช้LVMหรือผูกเมาท์แบบง่าย ๆ สามแบบก็ได้

เพื่อสร้างโซลูชันที่เชื่อมโยงคุณ

  1. สร้างพาร์ติชันด้วยระบบไฟล์
  2. ไปที่โหมดช่วยเหลือ (ผู้ใช้คนเดียวยังคงต้องการโฟลเดอร์บางโฟลเดอร์)
  3. ติดมันเป็น /mnt/data
  4. ย้ายโฟลเดอร์ทั้งหมดที่คุณต้องการย้าย การใช้cpและmv dir dir.oldอาจปลอดภัยกว่า แต่เนื่องจากฉันทำสิ่งนี้หลังจากติดตั้งแล้วมันไม่สำคัญสำหรับฉัน

    mv /home /mnt/data/
    mv /var  /mnt/data/
    
  5. สร้างรายการ bind mount ที่เหมาะสมใน fstab เช่นฉันมี

    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. รีบูต


ในmount(8)หน้า man ที่อยู่ข้างใต้nodiratimeมันบอกว่า: If noatime option is set, this option is not needed.มีข้อได้เปรียบที่ซ้ำซ้อนในการรวมไว้หรือไม่?
brannerchinese

5

โดยส่วนตัวแล้วฉันจะไปกับโซลูชันผูกติดของ @ Fabian หรือใช้ symlink:

  1. สร้าง/etc/fstabรายการสำหรับพาร์ติชันใหม่ (ใช้blkidเพื่อรับ UUID ที่เหมาะสมสำหรับพาร์ติชันใหม่ของคุณและอย่าลืมmkdir /mnt/data):

    UUID=01234567-89abc-def0-1234-567890abcde  /mnt/data  ext4  defaults  0 0
    
  2. ใช้mount -aหรือสิ่งที่คล้ายกันเพื่อเมาท์พาร์ติชันใหม่

  3. ย้ายโฟลเดอร์ดั้งเดิมไปยังพาร์ติชันใหม่ของคุณ:

    mv /var /mnt/data/
    mv /home /mnt/data/
    # ... (you get the point)
    
  4. สร้าง symlink

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

แม้ว่าวิธีการผูกมัดอาจเป็นวิธีปฏิบัติที่ดีที่สุดที่ฉันชอบมากกว่านี้เพราะคุณไม่ได้จบลงด้วยรายการที่ไม่จำเป็นdfและmountพาร์ติชั่นที่ยาวเกินความจำเป็น


1
จะเกิดอะไรขึ้นกับวิธีการที่เกี่ยวข้องหากมีบางสิ่งที่ต้องการ / var ก่อนที่จะติดตั้ง ฉันค่อนข้างสงสัยว่าวิธีการผูกจะสะอาดกว่า แต่ฉันไม่รู้จริงๆ
Auspex

@Auspex ไม่ควรมีความแตกต่างระหว่างสองวิธีในเรื่องนั้น (เนื่องจาก afaik โลคัลพาร์ติชันทั้งหมด/etc/fstabจะถูกเมาท์พร้อมกันระหว่างการบู๊ต) ก่อนที่จะทำการเชื่อม/mnt/dataโยง symlink ของคุณทั้งหมดจะเป็น 'ตาย' ดังนั้นความพยายามในการอ่าน / เขียนใด ๆ (และในส่วนย่อยที่ไม่มีอยู่) จะล้มเหลว (ด้วย ENOENT หากฉันจำได้ถูกต้อง) ด้วยการผูกม้าที่คุณได้รับสวยมากผลเดียวกัน แต่โปรแกรมจริงอาจเขียนลงบนพาร์ติชันราก (ถ้าพวกเขาพยายามที่จะเป็นสมาร์ทเกี่ยวกับไดเรกทอรีไม่มีอยู่)
mreithub

1
นั่นไม่จริงอย่างแน่นอน รูทถูกเมาท์ก่อนและฉันถามโดยเฉพาะเพราะคำแนะนำ "รูทแบบอ่านอย่างเดียว" ของเดเบียนกล่าวถึงความเป็นไปได้ของกระบวนการที่ต้องการเข้าถึง / var ก่อนที่จะติดตั้ง แต่ในกรณีของฉันที่ฉันมี Raspberry Pi และได้ตั้งค่าระบบไฟล์แบบอ่านอย่างเดียวใน / (เนื่องจาก SD การ์ดยังคงได้รับความเสียหายเมื่อไฟฟ้าดับไปที่เครื่อง) คุณสนับสนุนฉันว่าวิธีใดวิธีหนึ่งจะทำงาน . ไม่มีสิ่งใดที่จะเขียนลงในระบบไฟล์รูทเพราะเป็น RO ดังนั้นกรณีใดกรณีหนึ่งจะส่งผลให้เกิดข้อผิดพลาด
Auspex

0

นอกจากขั้นตอนที่กำหนด cioby23 แล้วฉันยังต้องทำ:

  restorecon -R /var

เพื่อให้ sshd เริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.