จะย้าย / usr ไปยังพาร์ติชั่นใหม่ได้อย่างไร?


26

/usrโฟลเดอร์ของฉันต้องย้ายไปที่พาร์ติชันใหม่ ฉันจะทำสิ่งนี้โดยไม่ลบเนื้อหาได้อย่างไร

สามารถทำได้ในขณะที่ Ubuntu กำลังทำงานหรือฉันจำเป็นต้องใช้ LiveCD สำหรับสิ่งนี้หรือไม่?

คำตอบ:


27

มันจะปลอดภัยที่สุดหากใช้ Live CD แต่คุณสามารถทำได้:

  • คัดลอกไฟล์ทั้งหมดไปยังพาร์ติชันใหม่ตรวจสอบให้แน่ใจว่าเนื้อหาของ/usrไม่เปลี่ยนแปลงในขณะที่คุณทำเช่นนี้
  • แก้ไข/etc/fstabเพื่อที่/usrจะถูกเมานต์เมื่อรีบูตครั้งถัดไป
  • รีบูต
  • ลบไฟล์เก่า

ดูรายละเอียดด้านล่างในแต่ละขั้นตอนด้านล่าง

โปรดทราบว่าคุณไม่สามารถเมานต์พาร์ติชันใหม่ใน/usrขณะที่ทำงานเนื่องจากจะมีไฟล์จำนวนมาก/usrที่จะเปิด

คัดลอกไฟล์

cp -aผมจะใช้ -aเป็นตัวเลือกการเก็บถาวร จากหน้าคน :

-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

การแก้ไข / etc / fstab

คุณจำเป็นต้องรู้ UUID ของพาร์ติชันใหม่ของคุณ คุณสามารถดูแผนที่ได้โดยทำ:

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

จากนั้นเพิ่มบรรทัดนี้ไปที่/etc/fstab:

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

เปลี่ยน UUID เป็น UUID ของคุณและเปลี่ยนext4เป็นประเภทระบบไฟล์ที่คุณกำลังใช้ - คุณควรรู้สิ่งนี้หากคุณตั้งค่าพาร์ติชัน

ลบไฟล์เก่า

หลังจากรีบูตไฟล์เก่าในบนพาร์ติชันรากจะถูกซ่อนไว้โดยพาร์ทิชันใหม่ติดตั้งอยู่บน/usr /usrแต่เราสามารถใช้กลอุบายผูกติดบางอย่างเพื่อไปยังไฟล์เก่าแล้วลบออก

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

แต่มีการพิมพ์ผิดพลาดเล็กน้อย (พูดกด Enter เมื่อคุณพิมพ์เท่านั้นsudo rm -rf /mnt) อาจทำให้เกิดภัยพิบัติดังนั้นฉันจะใช้วิธีนี้ถ้าคุณมั่นใจมากในสิ่งที่คุณทำไม่สามารถจัดการกับการหยุดทำงานใด ๆ หรือไม่มี การเข้าถึงตัวเครื่องและด้วยเหตุนี้จึงไม่สามารถบูตจากซีดีสดหรืออุปกรณ์ USB สด


4
rsyncเหมาะกว่านี้มากกว่าcp
Marco Ceppi

1
@MarcoCeppi คุณสามารถขยายที่ได้หรือไม่ อาจจะให้คำตอบที่แตกต่างที่ใช้rsyncแทน?
Kazark

6
แทนที่คำสั่ง CP rsync -avzด้วย Rsync ให้คุณรีสตาร์ทสำเนาและโดยทั่วไปควรใช้เมื่อย้ายระหว่างพาร์ติชันอุปกรณ์บล็อกหรือเครื่อง
Marco Ceppi

2
cpห้ามใช้ มันไม่ได้เก็บรักษาลิงก์ถาวร สิ่งนี้จะทำให้การอัปเกรดแพ็คเกจหยุดชะงัก ตัวอย่างเช่น/usr/bin/s2pและ/usr/bin/psedเป็นไฟล์เดียวกัน การย้ายด้วยcpจะเป็นการสร้างไฟล์อิสระ 2 เวอร์ชัน ทำrsync -aHแทน
oᴉɹǝɥɔ

1
ก่อนอื่นให้ข้ามแฟล็ก -z - เปิดใช้งานการบีบอัดซึ่งคุณไม่ได้ส่งไฟล์ผ่านเครือข่ายนั้นไม่มีค่าใช้จ่าย (ยกเว้น rsync นั้นฉลาดพอที่จะเพิกเฉยได้ แต่ก็ยังอาจทิ้งไว้) . @ AleksandarStefanovićคุณต้องการเนื้อหาที่นั่นอย่างแน่นอนไม่ใช่โฟลเดอร์และสาเหตุที่มันเกิดขึ้นแบบนั้นเนื่องจาก rsync quirks บางอย่าง: มันrsync -avH a/ bแตกต่างจากrsync -avH a bการคัดลอกเนื้อหาของโฟลเดอร์a(นั่นคือa/*) ในกรณีแรกและตัวโฟลเดอร์เองในวินาที ตรวจสอบให้แน่ใจว่าคุณใช้เครื่องหมายทับที่นี่
Darael

7

เนื่องจากห้องสมุดส่วนใหญ่ที่ใช้อยู่ใน / usr ฉันจะไม่แนะนำให้ย้ายไดเรกทอรีนี้ในขณะที่ใช้งาน Ubuntu ที่จริงแล้วคุณอาจได้รับข้อความแสดงข้อผิดพลาดเมื่อพยายามทำเช่นนี้ ดังนั้นที่ดีที่สุดคือการใช้ LiveCD

คุณสามารถใช้หลายวิธีในการย้าย / คัดลอกไฟล์ cp, rsync ฯลฯ ที่คุณต้องการตรวจสอบให้แน่ใจว่ามีการสร้าง symlink และไม่ได้คัดลอก cp และ rsync ทั้งคู่มีตัวเลือกสำหรับสิ่งนี้

หลังจากย้ายไฟล์ไปยังพาร์ติชันอื่นคุณต้องเพิ่มการเมานท์อื่นใน / etc / fstab เพื่อเมาท์พาร์ติชั่นใหม่ไปที่ / usr


2

ความสนใจ: ฉันไม่รู้ว่าฉันกำลังทำอะไรอยู่ฉันแค่คัดลอกคำสั่งและทำตามที่คนอื่นแนะนำ นี่อาจเป็นวิธีที่ไม่ถูกต้องที่จะทำ แต่มันได้ผลสำหรับฉัน (อย่างน้อยก็ตอนนี้)

นี่คือวิธีที่ฉันทำ (ทำตามคำตอบของ Hamish และความคิดเห็น):

  1. คัดลอกไฟล์ทั้งหมดที่พาร์ติชันที่สร้างขึ้นใหม่ (แทนที่ด้วยตำแหน่งของพาร์ติชันของคุณมันควรมีลักษณะคล้ายกับของฉัน):

    rsync -avz /usr /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c 
    
  2. ณ จุดนี้ฉันรู้ว่ามันคัดลอกทุกอย่างลงใน/usrโฟลเดอร์บนพาร์ติชันซึ่งไม่ทำงานดังนั้นฉันจึงคัดลอกทุกอย่าง (ที่มีตัวจัดการไฟล์) จากโฟลเดอร์นั้นไปยังรูทของพาร์ติชันและการลบที่ว่างเปล่า โฟลเดอร์หลังจากนั้น

  3. แก้ไข/etc/fstab(เช่นเดียวกับคำตอบของ Hamish แน่นอนแทนที่ด้วย UUID ของคุณ)

    UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2
    
  4. ขั้นตอนที่ไม่ฉลาดนัก: ฉันเปลี่ยนชื่อ/usrพาร์ทิชันที่เมาท์อยู่ในปัจจุบันเป็น/usrBACKUPเพียงเพื่อให้ฉันรู้ว่าเมื่อฉันรีบูตระบบจริงๆแล้วมันรีบูตเป็นพาร์ติชันที่สร้างขึ้นใหม่ไม่ใช่พาร์ทิชันเก่า . หลังจากนั้นทุกอย่าง glitched บนหน้าจอและฉันมีที่กำลังจะปิดโดยในระยะยาวการกดปุ่มเพาเวอร์(อัจฉริยะเป็นฉัน) ข้ามขั้นตอนนี้หากคุณไม่ต้องการที่จะผิดพลาดระบบของคุณ

  5. รีบูทระบบ

  6. หลังจากรีบูตเครื่องให้เปิดการตรวจสอบระบบหรือแอปพลิเคชันที่คล้ายกันเพื่อดูว่า/usrมีการติดตั้งพาร์ติชันใหม่ของคุณหรือไม่และตรวจสอบความปลอดภัยว่าทุกอย่างเป็นไปตามแผนที่วางไว้หรือไม่

  7. หลังจากตรวจสอบว่าทุกอย่างเรียบร้อยคุณสามารถลบ/usrพาร์ติชันเก่าของคุณ ฉันจะเก็บไว้ในกรณีที่มีบางอย่างผิดปกติ


ทำไมต้องตอบคำถาม 5 ปีหากมีคำตอบที่ยอมรับแล้วและคุณไม่รู้ว่าคุณกำลังพูดถึงอะไร
cmks

2
@cmks เพราะฉันรู้สึกว่าคำตอบอื่น ๆ ไม่สมบูรณ์ - ฉันไม่ได้คำตอบที่สมบูรณ์จากคำตอบเดียวและไม่มีคำตอบใดที่มีรายละเอียดเพียงพอสำหรับพวกเขา ฉันรู้สึกเหมือนผู้ใช้ที่มาที่คำถามนี้จะต้องการความช่วยเหลือ ไม่สำคัญว่ามันจะมีอายุห้าขวบถ้าใครยังต้องการข้อมูลจากคำถามนี้
Aleksandar Stefanović

1
ทำไมทุกคนรีบูตระบบของพวกเขา? ไม่ควรsudo mount -aอนุญาตให้มันทำงานต่อไปได้?
Hagen von Eitzen

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