เข้าถึงเนื้อหาต้นฉบับของจุดเชื่อมต่อ


32

ใน NAS ที่ไม่มีหัวของฉันฉันได้sdf1ติดตั้ง (แฟลชการ์ด) ใน/ขณะที่/homeติดตั้งจากlv00(โวลุ่ม LVM ที่สำรองข้อมูลโดยซอฟต์แวร์ RAID) เพื่อให้สามารถเข้าถึงเครื่องเมื่อ RAID ล้มเหลวผมมีสำเนาของคีย์สาธารณะ SSH ของฉัน ฯลฯ ในบนระบบไฟล์จาก/home/foo/.ssh การอัปเดตไฟล์ที่ถูกซ่อนไว้โดยติดผมปกติ remount ในทำในสิ่งที่ฉันต้องทำและจากนั้นย้ายกลับมาอยู่ในสถานที่ มีวิธีการที่จะบรรลุเป้าหมายนี้โดยไม่ต้องถอดออกหรือไม่?sdf1
/homelv00/mnt/homelv00
/home

คำตอบ:


44
mkdir /mnt/root
mount --bind / /mnt/root
ls /mnt/root/home/foo/.ssh

ตราบใดที่คุณใช้--bind(ตรงข้ามกับ--rbind) คุณจะได้รับโคลนของภูเขาโดยไม่ต้องมีสิ่งใดติดตั้งอยู่ด้านบน


ที่สมบูรณ์แบบ! ฉันเล่นด้วยความคิดmount --bindแต่เพียงมีความคิดที่ซับซ้อนที่แน่ใจว่าจะพังเมื่อฉันต้องการมัน สิ่งนี้ทำในสิ่งที่ฉันต้องการอย่างแน่นอนและยังสามารถติดตั้งแบบถาวรได้อีกด้วย ขอบคุณ
Janus

มันเป็นซ้ำ
poige

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

5

ฉันพยายามที่จะบรรลุสิ่งที่คล้ายกัน แต่คำตอบของephemientไม่ได้อธิบายความหมายของวิธีการ มันล้มเหลวสำหรับฉันและฉันก็เลยถามคำถามเดียวกันก่อนหน้านี้ที่ unix.SE หลังจากแสดงความคิดเห็นฉันคิดออกเองและตอบมัน นี่เป็นคำตอบของฉันที่แก้ไขแล้วเพื่อให้เข้ากับบริบทนี้ที่นี่ ฉันลบคำถามอื่น (และคำตอบ) ออกจากคำถามนี้

นี่คือสิ่งที่ฉันพยายามทำ:

กรณีตัวอย่าง

เมาท์:

/dev/sda1  on /     type ext4 (rw)
/dev/sdb1  on /data type ext4 (rw)
/data/home on /home type none (rw,bind)

หลังจากติดตั้ง/ฉันมีโฟลเดอร์สำหรับผู้ใช้/home/joe joeเมื่อตำแหน่งอื่นถูกเมาท์ ( /data) ฉันมีโฟลเดอร์บ้านครบชุดให้ใช้ดังนั้นฉันจึงติดตั้งมันไว้ในที่ ( /data/home on /home) มีโฟลเดอร์อยู่/data/home/joeตราบใดที่การติดตั้ง/dev/sdb1สำเร็จเขาจะได้เนื้อหาของ/data/home/joeมิฉะนั้นเขาจะถอยกลับไป/home/joe(บน/dev/sda1!)

เมื่อทำสำเร็จฉันจะเข้าถึงเนื้อหาดั้งเดิมของ /home/joe(บน/dev/sda1!) แทนที่จะเชื่อมโยงเข้ากับสถานที่ได้/data/home/joeอย่างไร

วิธีการแก้

จากความคิดเห็นของPatrickความคิดเห็นในคำถามของฉันและวิธีแก้ปัญหาโดย ephemient (คำตอบที่ยอมรับได้ที่นี่) ฉันมาพร้อมกับสิ่งต่อไปนี้

มันเป็นที่เห็นได้ชัดไปได้ที่จะmount --bind(หรือmount -o bind) เดอะโฟลเดอร์หลัก ( นี้เป็นส่วนสำคัญอย่างยิ่ง ) ของการผูกติดอื่น ๆ และจึงเข้าถึงเนื้อหาเดิม ดังนั้นสำหรับกรณีตัวอย่างของฉันแทนที่จะพยายาม:

mount --bind /home/joe /home/joe/underneath
# or ...
mount --bind /home /home/joe/underneath

(เช่นติดตั้งแล้วติดที่ผูกแล้วที่อื่น) ฉันต้อง:

test -d /.ROOT || mkdir /.ROOT
mount --bind / /.ROOT
mount --bind /.ROOT/home/joe /home/joe/underneath

ดังนั้นนี่คือสิ่งที่ Patrick มีความหมายในความคิดเห็นของเขา

หากคุณไม่ได้ติดตั้ง/(root) คำตอบนั้นน่าจะใช้ได้

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


การติดตั้งโฟลเดอร์หลักเป็นส่วนสำคัญที่ฉันพลาด ขอบคุณ
aidan

1

คุณสามารถย้ายเมานท์ไปยังตำแหน่งใหม่โดยไม่ต้องถอดเมาท์โดยใช้mount --move:

$ mount --move /home /mnt/home
do stuff with the local /home
$ mount --move /mnt/home /home

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