VirtualBox พร้อม Win10 host / Linux guest วิธีแชร์ไฟล์ด้วย unix semantics


0

ฉันมี Windows 10 ที่ทำงานบนแล็ปท็อปที่ใช้ VirtualBox ซึ่งทำงานกับแขกของ Linux

ฉันทำการเขียนโปรแกรมจำนวนมากสำหรับสภาพแวดล้อม Linux และกำลังทำงานกับที่เก็บซอร์สโค้ดนั่งอยู่ในทรีของ FS / ไดเรกทอรีที่แชร์กันระหว่างโฮสต์ Windows และแขกของ Linux เช่นการแก้ไขด้วย SublimeText ที่ทำงานบน Windows แต่ทำการคอมไพล์ทดสอบทดสอบรุ่นอื่น ๆ เทอร์มินัลเชื่อมต่อกับแขกของ Linux

ด้วยเหตุผลต่าง ๆ ฉันต้องการไดเรกทอรีที่โฮสต์ซอร์สโค้ดซอร์สโค้ดเพื่ออนุญาตซีแมนทิกส์เต็มรูปแบบ, เช่นสามารถตั้งค่า uid / gid สำหรับเจ้าของ, บิตการอนุญาต, สร้างฟีเจอร์, symlinks, ฯลฯ เป็นต้น

ฉันไม่สนใจว่าฟีเจอร์เหล่านี้จะไม่ถูกแชร์ระหว่าง Windows และ Linux อย่างมีความหมาย ฉันต้องการเพียงสิ่งเหล่านี้เท่านั้นที่จะถูกกำหนดไว้อย่างดีบนฝั่ง Linux ทางฝั่ง Windows ฉันแค่ต้องสามารถอ่าน / เขียนเนื้อหาของไฟล์ได้

ฉันต้องการให้ไฟล์โฮสต์บน Windows / โฮสต์ด้านไม่ใช่ Linux แขกเพราะฉันไม่ต้องการไฟแขก Linux สำหรับไฟล์ที่จะมองเห็น / สามารถเข้าถึงได้บน Windows

ฉันจะตั้งสิ่งนั้นขึ้นได้อย่างไร?

ฉันลองทำหลายอย่างแล้ว

ดูเหมือนว่า vboxsf เสนอคุณสมบัติ unix เพียงเล็กน้อยเท่านั้น โปรดแก้ไขฉันหากฉันผิด

ฉันลอง posixovl ที่ด้านบนของ vboxsf mount แต่ดูเหมือนว่าฉันจะไม่สามารถรับการสนับสนุนการดำเนินการอย่างง่ายเช่น "mkdir mydir; rm -rf mydir" การดำเนินการดังกล่าวจะล้มเหลวด้วย "rm: ไม่สามารถลบ 'mydir': ไดเรกทอรีไม่ว่าง" การวินิจฉัยปัญหาของฉันคือว่ามันจะสร้างไฟล์ "somedir / .pxovl" เพื่อเก็บบิตการอนุญาตของ somedir และสิ่งต่าง ๆ เช่นนั้นใน FS ที่ต่ำกว่า ใน FS ด้านบนไฟล์นั้นจะมองไม่เห็นดังนั้น "rm -rf" จึงไม่สามารถกำจัดไฟล์ได้ เมื่อ "rm -rf" พยายามที่จะ "rmdir mydir" บน FS ด้านบนนั่นจะทำให้เกิดความพยายามในการลดระดับ FS ที่ต่ำกว่าซึ่งล้มเหลวเนื่องจากไฟล์ ".pxovl" ยังคงอยู่ที่นั่น โปรดแก้ไขให้ฉันด้วยหากมีวิธีแก้ไขปัญหานั้น แต่มันทำให้ฉันบ้า

ฉันได้ลองตั้งค่าไดเรกทอรีเป็นเครือข่ายที่ใช้ร่วมกันทางหน้าต่างแล้วติดตั้งผ่าน mount.cifs บน linux ดูเหมือนว่าการเมาต์นั้นไม่ได้มีฟีเจอร์ unix อย่างถูกต้องและในแง่นั้นมีข้อ จำกัด คล้ายกับ vboxsf และฉันไม่สามารถหาตัวเลือกใด ๆ ที่จะอนุญาตให้มีการเลียนแบบหรืออะไรทำนองนั้น

มันเกิดขึ้นกับฉันว่าอาจจะมีโปรแกรมที่สามารถติดตั้งในฝั่งโฮสต์ Windows ที่มีซีแมนทิกส์ยูนิกซ์จริงและทำการเลียนแบบฟีเจอร์ Unix บางชนิดเช่นเซิร์ฟเวอร์ NFS หรือเซิร์ฟเวอร์ชนิดอื่นสำหรับระบบไฟล์ที่แชร์บนเครือข่าย แต่ ฉันดูเหมือนจะไม่พบสิ่งใด

มันก็เกิดขึ้นกับฉันเช่นกันว่าระบบไฟล์แบบซ้อนทับอาจเป็นเครื่องมือที่มีประโยชน์ในการนำโซลูชั่นดังกล่าวมาใช้

ความคิดใด ๆ

คำตอบ:


0

น่าเสียดายที่ Windows ไม่พิจารณาว่าไฟล์จะมีข้อมูลเมตาเดียวกับที่ระบบ Linux / Unix ทำซึ่งนำไปสู่การปวดหัวที่คุณกำลังประสบอยู่

ทางออกของฉัน (น่าเสียดายสำหรับคุณ) คือการเก็บไฟล์ไว้บน Linux VM และใช้ CIFS / Samba เพื่อแชร์กับโฮสต์ Windows - ฉันทำเช่นนี้บ่อย

ฉันไม่ได้ตระหนักถึงวิธีการเพื่อให้เกิดความโปร่งใสและความน่าเชื่อถือที่คุณจะได้รับในขณะที่โฮสต์ไฟล์บนระบบไฟล์ Windows (ที่ไม่ใช่ Unix)


มันอาจจะมีมูลค่าการขุดเป็นระบบย่อย Windows สำหรับลินุกซ์ เมื่อเร็ว ๆ นี้พวกเขากำลังก้าวไปข้างหน้า (เช่น: การปรับปรุง Chmod / Chown WSL ) ดังนั้นคุณอาจจะสามารถติดตั้งเซิร์ฟเวอร์ NFS หรือบางสิ่งภายใต้ WSL เพื่อให้ได้สิ่งที่คุณต้องการ แต่ได้รับการนำ NFS มาใช้บน Linux เคอร์เนล) สิ่งนี้น่าจะเป็นไปไม่ได้


ขอบคุณสำหรับคำใบ้ใน WSL ฉันใช้ WSL แล้ว แต่ไม่ได้ตระหนักว่าตอนนี้มีคุณสมบัตินี้เพื่อจำลองความหมายระบบไฟล์ยูนิกซ์ในโฟลเดอร์ที่แชร์ ฉันเดาว่าเป็นขั้นตอนเดียวในทิศทางที่ถูกต้องหากฉันสามารถหาวิธีการโฮสต์เซิร์ฟเวอร์ไฟล์ใน WSL ได้ในตอนนี้ มันไม่จำเป็นต้องเป็นไฟล์เซิร์ฟเวอร์แบบดั้งเดิมฉันเดาด้วยว่าสิ่งต่าง ๆ เช่น SSHFS มีอยู่จริง ฉันจะทำการขุด / ทดลองอีกครั้งในทิศทางนั้น
R Bergmair

0

ปรากฎว่าฉันได้ใกล้เคียงกับสิ่งที่ฉันต้องการผ่านการรวมกันของ

  • WSL ใช้คุณสมบัติ drvfs ใหม่ที่มีลักษณะบางอย่างของซีแมนทิกส์ unix ถูกจำลองภายใต้ WSL ( metadataตัวเลือกไปยัง drvfs mount);
  • sshd ทำงานบน WSL นั้นบนโฮสต์ windows;
  • sshfs ทำงานบนแขก VirtualBox ภายใต้ Linux

ทางออกคือ:

  • การติดตั้ง Ubuntu สำหรับ Windows (WSL)
  • การเปิดใช้งาน sudo passwordless ภายใต้ WSL ใช้บรรทัด%sudo ALL=(ALL:ALL) NOPASSWD: ALLใน/etc/sudoersWSL
  • วางคำสั่ง"bash -c 'sudo /etc/init.d/ssh start'"บนเริ่มอัตโนมัติภายใต้ windows โดยใช้รีจิสทรีเพื่อให้เซิร์ฟเวอร์ OpenSSH ที่ใช้ WSL เริ่มทำงานโดยอัตโนมัติทันทีที่ฉันเข้าสู่ระบบ
  • การกำหนดค่าไฟร์วอลล์ Windows Defender เพื่อให้สามารถเชื่อมต่อกับพอร์ต 22
  • การตั้งค่าคีย์ SSH เพื่ออนุญาตการล็อกอินแบบไม่ใช้รหัสผ่านจาก linux guest ไปยังเซิร์ฟเวอร์ SSH ที่ใช้ WSL
  • ใช้wsl.confเพื่อฉีดตัวเลือกmetadata,umask=0002,fmask=0113เมื่อติดตั้ง drvfs บน WSL
  • ผู้เข้าพักบนลินุกซ์ที่วางuser_allow_otherใน/etc/fuse.conf
  • บนลินุกซ์แขกวางsudo -u myuser sshfs -o allow_other myuser@windowshost:/mnt/c /mnt/cเพื่อแบ่งปัน C-Drive
  • ต้องแน่ใจว่า UID myuserนั้นเหมือนกันระหว่าง WSL และ Linux

ผลลัพธ์: สิ่งนี้ทำให้ชื่อไฟล์และเนื้อหาไฟล์ถูกแชร์ระหว่าง Windows, WSL และ Linux บนเกสต์ VM ซึ่งความสามารถของ unix เพิ่มเติมเช่นสิทธิ์บิตและลิงก์จะถูกจำลอง แต่:

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