การเปลี่ยนชื่อโฟลเดอร์ด้วย 180GB มีความเสี่ยงmv
หรือไม่
เรามีโฟลเดอร์/data
ที่มี 180GB
เราต้องการเปลี่ยนชื่อ/data
โฟลเดอร์/BD_FILES
ด้วยmv
คำสั่ง
ปลอดภัยไหมที่จะทำเช่นนั้น?
การเปลี่ยนชื่อโฟลเดอร์ด้วย 180GB มีความเสี่ยงmv
หรือไม่
เรามีโฟลเดอร์/data
ที่มี 180GB
เราต้องการเปลี่ยนชื่อ/data
โฟลเดอร์/BD_FILES
ด้วยmv
คำสั่ง
ปลอดภัยไหมที่จะทำเช่นนั้น?
คำตอบ:
การเปลี่ยนชื่อในโฟลเดอร์นั้นปลอดภัยหากอยู่ในระบบไฟล์เดียวกัน
หากเป็นจุดเมานท์ ( /data
ดูเหมือนว่ามันอาจเป็นจุดเมานท์ให้ฉันตรวจสอบด้วยmount
) จากนั้นคุณต้องทำสิ่งอื่นที่ไม่ใช่แค่ง่าย ๆmv
เพราะmv /data /BD_FILES
จะย้ายข้อมูลไปยังพาร์ติชันราก (ซึ่งอาจไม่ใช่สิ่งที่ คุณต้องการที่จะเกิดขึ้น)
คุณควร unmount ระบบไฟล์เปลี่ยนชื่อไดเรกทอรีว่างทันทีอัพเดต/etc/fstab
ด้วยตำแหน่งใหม่สำหรับระบบไฟล์นี้จากนั้นติดตั้งระบบไฟล์ใหม่ที่ตำแหน่งที่เปลี่ยนชื่อ
ในคำอื่น ๆ
umount /data
mv /data /BD_FILES
(สมมติว่า/BD_FILES
ไม่มีอยู่ในกรณีนั้นให้ย้ายออกไปก่อน)/etc/fstab
เปลี่ยนจุดเชื่อมต่อจาก/data
เป็น/BD_FILES
mount /BD_FILES
สิ่งนี้ไม่เกี่ยวข้องกับการคัดลอกไฟล์ใด ๆ รอบ ๆ เพียงแค่เปลี่ยนชื่อของไดเรกทอรีที่ทำหน้าที่เป็นจุดเชื่อมต่อสำหรับระบบไฟล์
หากการเปลี่ยนชื่อของไดเรกทอรีเกี่ยวข้องกับการย้ายไปยังระบบไฟล์ใหม่ (ซึ่งจะเป็นกรณีถ้า/data
อยู่ในดิสก์หนึ่งในขณะที่/BD_FILES
อยู่ในดิสก์อื่นสิ่งทั่วไปที่ต้องทำถ้าคุณย้ายสิ่งต่าง ๆ ไปยังพาร์ติชันที่ใหญ่กว่า) ฉันขอแนะนำให้คัดลอกข้อมูลในขณะที่ยังคงสภาพดั้งเดิมจนกว่าคุณจะสามารถตรวจสอบได้ว่าสำเนานั้นโอเค คุณสามารถทำได้ด้วย
rsync -a /data/ /BD_FILES/
ตัวอย่างเช่น แต่ดูrsync
คู่มือสำหรับสิ่งนี้ทำและไม่ทำ (มันไม่รักษาลิงก์ยากเช่น)
เมื่อเปลี่ยนชื่อโฟลเดอร์แล้วคุณต้องตรวจสอบให้แน่ใจว่าขั้นตอนที่มีอยู่ (โปรแกรมและผู้ใช้ที่ใช้โฟลเดอร์ข้อมูลสำรองเป็นต้น) รับรู้ถึงการเปลี่ยนชื่อ
mv
จะทำการrename
โทรของระบบ แต่เนื่องจากสถานการณ์หนึ่งไม่ได้ตระหนักว่ามันจะคัดลอกไฟล์และลบต้นฉบับ ถ้าฉันจะต้องมีบางอย่างเป็นเพียงแค่rename
การเรียกระบบจะทำและmv
ไม่ได้ไปทำอะไร "ฉลาด" os.rename
ด้านหลังของฉันฉันเปิดหลามเปลือกและการใช้งาน
mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
rsync
คือมันสามารถรีสตาร์ทได้
rsync -a
เก็บรักษาข้อมูลเมตาเกือบทั้งหมด แต่ไม่ใช่ลิงก์ที่ยาก, ACL หรือแอตทริบิวต์เพิ่มเติม (เพิ่ม-HAX
สำหรับสิ่งนั้น)
rename
คำสั่งที่แตกต่างกับพฤติกรรมที่แตกต่างกัน ฉันคิดว่านั่นเป็นเหตุผลเพียงพอที่จะไม่ใช้rename
คำสั่งเมื่อคุณต้องการให้แน่ใจว่ามันจะทำอะไร
คุณไม่ได้เปลี่ยนชื่อทุกไฟล์ในไดเรกทอรีคุณจะเปลี่ยนชื่อไฟล์หนึ่งไฟล์ใน / นั่นเป็นเพราะ:
ดังนั้นการเปลี่ยนชื่อไดเรกทอรีไม่ว่าจะมีไฟล์กี่ไฟล์หรือมีข้อมูลมากน้อยแค่ไหนก็ตาม
หากคุณเพิ่งเปลี่ยนชื่อ (แหล่งที่มาและเป้าหมายในระบบไฟล์เดียวกัน ) มันเป็นเพียงการเปลี่ยนชื่อของรายการไดเรกทอรี มันทั้งประสบความสำเร็จและไดเรกทอรีมีชื่อใหม่หรือล้มเหลวในการเปลี่ยนแปลงกรณีที่ไม่มีอะไร*
mv
ถ้าต้นทางและปลายทางอยู่บนระบบไฟล์ที่แตกต่างกันข้อมูลที่จะต้องมีการคัดลอกโดย ความแตกต่างในคุณสมบัติของระบบไฟล์เช่นขนาดไฟล์สูงสุดข้อ จำกัด ในชื่อไฟล์ ฯลฯ อาจทำให้เกิดปัญหาได้ เพื่อหลีกเลี่ยงปัญหาขั้นแรกให้คัดลอกไฟล์ ( cp
,, rsync
... ) และหลังจากการคัดลอกเสร็จสมบูรณ์ให้ลบไฟล์ในตำแหน่งเดิม
* อย่างไรก็ตามมีบางกรณีที่มุมเช่นที่กล่าวถึงในส่วนBUGSในการเปลี่ยนชื่อคนที่ 2
อย่างที่คนอื่นพูดการเปลี่ยนชื่อโฟลเดอร์ไม่มีความเสี่ยงต่อเนื้อหาโดยธรรมชาติ แต่มีความเสี่ยงที่แตกต่างกันซึ่งคุณอาจต้องการพิจารณา
ขั้นตอนที่มีอยู่, สคริปต์, ทางลัดที่ผู้ใช้กำหนดและการกำหนดค่าที่อ้างอิงตำแหน่งเดิมอาจถูกทำลายโดยการเปลี่ยนแปลงนี้และหากเส้นทางถูกเก็บไว้ในฐานข้อมูลตัวอย่างเช่นการปรับปรุงพวกเขาอาจเป็นงานใหญ่
สิ่งหนึ่งที่คุณสามารถทำได้คือสร้างลิงก์สัญลักษณ์สำหรับชื่อไดเรกทอรีใหม่ แต่ปล่อยให้ชื่อเดิมอยู่ครู่หนึ่ง ที่จะให้เวลาแก่คุณในการประเมินผลกระทบของการเปลี่ยนแปลงนี้ คุณสามารถลบชื่อเก่าชั่วคราวดูว่ามีปัญหาหรือไม่และถ้ามีเพียงแค่สร้างชื่อเก่าขึ้นใหม่เพื่อให้ผู้คนสามารถทำงานต่อไปได้ในขณะที่คุณทราบว่าต้องปรับปรุงอะไรบ้าง
คำสั่งแบบนี้ควรทำ:
ln -s /data /BD_FILES
mv thing1 thing2 ; ln --symbolic ./thing2 thing1
ฉันชอบสิ่งที่ชอบ ด้วยวิธีนี้ฉันมีชื่อใหม่และสามารถทดสอบการขาดของเก่าโดยการลบ symlink
เปลี่ยนชื่อเป็นอะตอม ความเสี่ยงที่สมเหตุสมผลเพียงอย่างเดียวคือการmv
ตัดสินใจที่จะทำสำเนาทุกอย่างด้วยเหตุผลบางอย่างและล้มเหลวไปครึ่งทาง หากคุณมี GNUmv
, mv -T
จะลบความเสี่ยงนี้
mv -T
บอกmv
ว่ามันกำลังย้ายไปที่ไม่ใช่โฟลเดอร์; ซึ่งจะทำให้มันปฏิเสธที่จะทำmkdir()
ซึ่งจะทำให้มันล้มเหลวหากย้ายโฟลเดอร์และตัดสินใจที่จะคัดลอกด้วยเหตุผลบางอย่าง
ฉันมีส่วนร่วมในการเขย่าบั๊กจาก mv -T
ในขณะที่ทำงานกับวิทยานิพนธ์ของอาจารย์เมื่อหลายปีก่อน มันเคยทำสิ่งผิดในกรณีขอบมากเกินไป
ในทางกลับกันคุณมีข้อมูลผู้ใช้ 180GB บนพาร์ติชันรูท คุณอาจต้องการย้ายสิ่งนี้ออกจากพาร์ติชันรูท
mv
ด้วย-i
ตัวเลือก