การเปลี่ยนชื่อโฟลเดอร์ใหญ่: มันเสี่ยงไหม?


19

การเปลี่ยนชื่อโฟลเดอร์ด้วย 180GB มีความเสี่ยงmvหรือไม่

เรามีโฟลเดอร์/dataที่มี 180GB

เราต้องการเปลี่ยนชื่อ/dataโฟลเดอร์/BD_FILESด้วยmvคำสั่ง

ปลอดภัยไหมที่จะทำเช่นนั้น?


14
ทำไมและอย่างไรจึงจะมีความเสี่ยง? หากคุณไม่แน่ใจให้โทรmvด้วย-iตัวเลือก
ของหวาน

5
มีอะไรในสภาพแวดล้อมที่ทำให้คุณคิดว่าอาจมีความเสี่ยงหรือไม่?
Jeff Schaller

2
คุณหมายถึงว่ามีความเสี่ยงที่การกระทำนั้นอาจก่อให้เกิดปัญหาหรือไม่หรือมีความเสี่ยงที่อาจมีผลกระทบที่เป็นปัญหาหรือไม่? หากคุณมีโปรแกรมใด ๆ ที่คาดว่าจะมีโฟลเดอร์ / data อยู่การเปลี่ยนชื่ออาจทำให้เกิดปัญหาได้
สะสม

3
หมายเหตุด้านข้าง: เกือบทุกอย่างจะปลอดภัยหากคุณยืนยันข้อมูลสำรองแล้ว ไม่มีอะไรปลอดภัยเท่าที่ควรถ้าคุณไม่ กล่าวอีกนัยหนึ่ง: เมื่อถามว่า "ปลอดภัยหรือไม่" ความคิดแรกของคุณควรเป็น "ฉันได้ยืนยันข้อมูลสำรองแล้วหรือยัง"
RedGrittyBrick

2
ฉันหมายถึงความเสี่ยงที่อาจเป็นปัญหาเมื่อย้ายโฟลเดอร์ขนาดใหญ่ที่มีข้อมูลโดยระบบปฏิบัติการนี้สามารถหยุดการย้ายที่อยู่ตรงกลางเช่นหรือข้อมูลที่หลวม
yael

คำตอบ:


71

การเปลี่ยนชื่อในโฟลเดอร์นั้นปลอดภัยหากอยู่ในระบบไฟล์เดียวกัน


หากเป็นจุดเมานท์ ( /dataดูเหมือนว่ามันอาจเป็นจุดเมานท์ให้ฉันตรวจสอบด้วยmount) จากนั้นคุณต้องทำสิ่งอื่นที่ไม่ใช่แค่ง่าย ๆmvเพราะmv /data /BD_FILESจะย้ายข้อมูลไปยังพาร์ติชันราก (ซึ่งอาจไม่ใช่สิ่งที่ คุณต้องการที่จะเกิดขึ้น)

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

ในคำอื่น ๆ

  1. umount /data
  2. mv /data /BD_FILES(สมมติว่า/BD_FILESไม่มีอยู่ในกรณีนั้นให้ย้ายออกไปก่อน)
  3. อัปเดต/etc/fstabเปลี่ยนจุดเชื่อมต่อจาก/dataเป็น/BD_FILES
  4. mount /BD_FILES

สิ่งนี้ไม่เกี่ยวข้องกับการคัดลอกไฟล์ใด ๆ รอบ ๆ เพียงแค่เปลี่ยนชื่อของไดเรกทอรีที่ทำหน้าที่เป็นจุดเชื่อมต่อสำหรับระบบไฟล์


หากการเปลี่ยนชื่อของไดเรกทอรีเกี่ยวข้องกับการย้ายไปยังระบบไฟล์ใหม่ (ซึ่งจะเป็นกรณีถ้า/dataอยู่ในดิสก์หนึ่งในขณะที่/BD_FILESอยู่ในดิสก์อื่นสิ่งทั่วไปที่ต้องทำถ้าคุณย้ายสิ่งต่าง ๆ ไปยังพาร์ติชันที่ใหญ่กว่า) ฉันขอแนะนำให้คัดลอกข้อมูลในขณะที่ยังคงสภาพดั้งเดิมจนกว่าคุณจะสามารถตรวจสอบได้ว่าสำเนานั้นโอเค คุณสามารถทำได้ด้วย

rsync -a /data/ /BD_FILES/

ตัวอย่างเช่น แต่ดูrsyncคู่มือสำหรับสิ่งนี้ทำและไม่ทำ (มันไม่รักษาลิงก์ยากเช่น)


เมื่อเปลี่ยนชื่อโฟลเดอร์แล้วคุณต้องตรวจสอบให้แน่ใจว่าขั้นตอนที่มีอยู่ (โปรแกรมและผู้ใช้ที่ใช้โฟลเดอร์ข้อมูลสำรองเป็นต้น) รับรู้ถึงการเปลี่ยนชื่อ


9
มีความเสี่ยงที่หนึ่งคาดว่าmvจะทำการrenameโทรของระบบ แต่เนื่องจากสถานการณ์หนึ่งไม่ได้ตระหนักว่ามันจะคัดลอกไฟล์และลบต้นฉบับ ถ้าฉันจะต้องมีบางอย่างเป็นเพียงแค่renameการเรียกระบบจะทำและmvไม่ได้ไปทำอะไร "ฉลาด" os.renameด้านหลังของฉันฉันเปิดหลามเปลือกและการใช้งาน
kasperd

3
ด้วยเคอร์เนล Linux ที่ค่อนข้างใหม่คุณสามารถย้ายจุดเมานท์แทน:mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
David Foerster

2
@MichealJohnson ที่อาจจะทำงานบนระบบ Linux ได้ใช่ สิ่งที่เรียบร้อยก็rsyncคือมันสามารถรีสตาร์ทได้
Kusalananda

3
@MichealJohnson One ใช้เครื่องมือที่สะดวกสบายที่สุดในการใช้งานอย่างเห็นได้ชัด ใช่rsync -aเก็บรักษาข้อมูลเมตาเกือบทั้งหมด แต่ไม่ใช่ลิงก์ที่ยาก, ACL หรือแอตทริบิวต์เพิ่มเติม (เพิ่ม-HAXสำหรับสิ่งนั้น)
Kusalananda

3
@ Max การกระจายที่แตกต่างกันมีrenameคำสั่งที่แตกต่างกับพฤติกรรมที่แตกต่างกัน ฉันคิดว่านั่นเป็นเหตุผลเพียงพอที่จะไม่ใช้renameคำสั่งเมื่อคุณต้องการให้แน่ใจว่ามันจะทำอะไร
kasperd

16

คุณไม่ได้เปลี่ยนชื่อทุกไฟล์ในไดเรกทอรีคุณจะเปลี่ยนชื่อไฟล์หนึ่งไฟล์ใน / นั่นเป็นเพราะ:

  1. ไดเรกทอรีคือไฟล์และ
  2. ระบบไฟล์ใส่ใจจริงๆเกี่ยวกับ inode ไม่ใช่ข้อความจริง

ดังนั้นการเปลี่ยนชื่อไดเรกทอรีไม่ว่าจะมีไฟล์กี่ไฟล์หรือมีข้อมูลมากน้อยแค่ไหนก็ตาม


14

หากคุณเพิ่งเปลี่ยนชื่อ (แหล่งที่มาและเป้าหมายในระบบไฟล์เดียวกัน ) มันเป็นเพียงการเปลี่ยนชื่อของรายการไดเรกทอรี มันทั้งประสบความสำเร็จและไดเรกทอรีมีชื่อใหม่หรือล้มเหลวในการเปลี่ยนแปลงกรณีที่ไม่มีอะไร*

mvถ้าต้นทางและปลายทางอยู่บนระบบไฟล์ที่แตกต่างกันข้อมูลที่จะต้องมีการคัดลอกโดย ความแตกต่างในคุณสมบัติของระบบไฟล์เช่นขนาดไฟล์สูงสุดข้อ จำกัด ในชื่อไฟล์ ฯลฯ อาจทำให้เกิดปัญหาได้ เพื่อหลีกเลี่ยงปัญหาขั้นแรกให้คัดลอกไฟล์ ( cp,, rsync... ) และหลังจากการคัดลอกเสร็จสมบูรณ์ให้ลบไฟล์ในตำแหน่งเดิม

* อย่างไรก็ตามมีบางกรณีที่มุมเช่นที่กล่าวถึงในส่วนBUGSในการเปลี่ยนชื่อคนที่ 2


> "มันประสบความสำเร็จและไดเรกทอรีมีชื่อใหม่หรือล้มเหลวในกรณีที่ไม่มีอะไรเปลี่ยนแปลง" รับประกันได้อย่างไร? มันเป็นความจริงสำหรับระบบไฟล์ทั้งหมดหรือไม่ มีเอกสารเกี่ยวกับเรื่องนี้หรือไม่?
turbanoff

การเปลี่ยนชื่อเป็น syscall เดียวอย่างไรก็ตามมีหมายเหตุเกี่ยวกับ NFS ในส่วนBUGSของการเปลี่ยนชื่อ man : การเปลี่ยนชื่อสามารถทำได้สำเร็จแม้ว่าข้อผิดพลาดจะถูกส่งกลับเมื่อใช้ NFS (ดูรายละเอียดในหน้า man) ฉันเพิ่มบันทึกย่อในคำตอบด้วย ฉันไม่คาดหวังว่าระบบไฟล์ใด ๆ ในเคอร์เนลจะพิจารณาว่าเป็นที่ยอมรับได้สำหรับรายการไดเรกทอรีหายไปหากการเปลี่ยนชื่อล้มเหลว
sebasth

8

อย่างที่คนอื่นพูดการเปลี่ยนชื่อโฟลเดอร์ไม่มีความเสี่ยงต่อเนื้อหาโดยธรรมชาติ แต่มีความเสี่ยงที่แตกต่างกันซึ่งคุณอาจต้องการพิจารณา

ขั้นตอนที่มีอยู่, สคริปต์, ทางลัดที่ผู้ใช้กำหนดและการกำหนดค่าที่อ้างอิงตำแหน่งเดิมอาจถูกทำลายโดยการเปลี่ยนแปลงนี้และหากเส้นทางถูกเก็บไว้ในฐานข้อมูลตัวอย่างเช่นการปรับปรุงพวกเขาอาจเป็นงานใหญ่

สิ่งหนึ่งที่คุณสามารถทำได้คือสร้างลิงก์สัญลักษณ์สำหรับชื่อไดเรกทอรีใหม่ แต่ปล่อยให้ชื่อเดิมอยู่ครู่หนึ่ง ที่จะให้เวลาแก่คุณในการประเมินผลกระทบของการเปลี่ยนแปลงนี้ คุณสามารถลบชื่อเก่าชั่วคราวดูว่ามีปัญหาหรือไม่และถ้ามีเพียงแค่สร้างชื่อเก่าขึ้นใหม่เพื่อให้ผู้คนสามารถทำงานต่อไปได้ในขณะที่คุณทราบว่าต้องปรับปรุงอะไรบ้าง

คำสั่งแบบนี้ควรทำ: ln -s /data /BD_FILES


4
ความเสี่ยงที่ไม่รุนแรงอีกอย่างหนึ่งที่ยังไม่ได้กล่าวถึงนั้นขึ้นอยู่กับกลยุทธ์การสำรองข้อมูลของคุณสำหรับโฟลเดอร์นั้นอาจนำไปสู่ปัญหาพื้นที่ดิสก์และเวลาแฝงในไดรฟ์สำรองเนื่องจาก 180GB ของข้อมูล "ใหม่" ปรากฏขึ้นทันทีและจำเป็นต้อง สำรอง
Kent

mv thing1 thing2 ; ln --symbolic ./thing2 thing1ฉันชอบสิ่งที่ชอบ ด้วยวิธีนี้ฉันมีชื่อใหม่และสามารถทดสอบการขาดของเก่าโดยการลบ symlink
can-ned_food

3

เปลี่ยนชื่อเป็นอะตอม ความเสี่ยงที่สมเหตุสมผลเพียงอย่างเดียวคือการmvตัดสินใจที่จะทำสำเนาทุกอย่างด้วยเหตุผลบางอย่างและล้มเหลวไปครึ่งทาง หากคุณมี GNUmv , mv -Tจะลบความเสี่ยงนี้

mv -Tบอกmvว่ามันกำลังย้ายไปที่ไม่ใช่โฟลเดอร์; ซึ่งจะทำให้มันปฏิเสธที่จะทำmkdir()ซึ่งจะทำให้มันล้มเหลวหากย้ายโฟลเดอร์และตัดสินใจที่จะคัดลอกด้วยเหตุผลบางอย่าง

ฉันมีส่วนร่วมในการเขย่าบั๊กจาก mv -Tในขณะที่ทำงานกับวิทยานิพนธ์ของอาจารย์เมื่อหลายปีก่อน มันเคยทำสิ่งผิดในกรณีขอบมากเกินไป

ในทางกลับกันคุณมีข้อมูลผู้ใช้ 180GB บนพาร์ติชันรูท คุณอาจต้องการย้ายสิ่งนี้ออกจากพาร์ติชันรูท


คุณไม่สามารถบอกได้จากชื่อเพียงอย่างเดียวหากมีบางสิ่งใน "รูตพาร์ติชัน" หรือไม่
ปีเตอร์

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