การลบ symlink ของโฟลเดอร์ Ubuntu จะลบเนื้อหาของโฟลเดอร์เป้าหมายเมื่อดำเนินการผ่าน OSX & Samba


0

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

นี่คือลำดับของเหตุการณ์:

  1. แตะ foo / bar / 1.txt
  2. สร้าง symlink ไปยังโฟลเดอร์บนเครื่อง Ubuntu เช่น ln -s foo / bar bar2
  3. เมานท์แชร์ Samba ที่มี symlink แถบ 2 บน Mac
  4. ลบ symlink bar2 ผ่าน Mac
  5. symlink bar2 จะถูกลบ แต่ไฟล์ foo / bar / 1.txt จะหายไปด้วย ไฟล์หรือโฟลเดอร์ใด ๆ ใน foo / bar จะหายไป

ในขณะนี้ฉันใช้ El Capitan, Ubuntu 16.04 กับ Samba 4.3.11

ฉันมีตัวเลือกต่อไปนี้ใน smb.conf ซึ่งเป็นสิ่งเดียวที่นึกถึงได้มากที่สุดที่เกี่ยวข้อง: อนุญาตให้ลิงก์ที่ไม่ปลอดภัย = ใช่ส่วนขยาย unix = ไม่

คำตอบ:


0

เนื่องจากการแชร์ไฟล์ windows และด้วยเหตุนี้แซมบ้าดั้งเดิมจึงไม่มีแนวคิดเกี่ยวกับ symlink มันจะลบแผนผังโฟลเดอร์ทั้งหมดผ่าน symlink อย่างไรก็ตามคุณอาจลองเปลี่ยนunix extensions = yesเป็น OSX ของคุณอาจเข้าใจสิ่งนี้เช่นกัน

จากหน้าhttps://www.samba.org/samba/docs/man/manpages/smb.conf.5.html#UNIXEXTENSIONSหน้า

ส่วนขยาย unix (G)

พารามิเตอร์บูลีนนี้ควบคุมว่า Samba ใช้ส่วนขยาย CIFS UNIX ตามที่ HP กำหนดหรือไม่ ส่วนขยายเหล่านี้ช่วยให้แซมบ้าให้บริการไคลเอนต์ UNIX CIFS ได้ดีขึ้นด้วยการสนับสนุนคุณสมบัติต่างๆเช่นลิงก์สัญลักษณ์ลิงก์หนัก ฯลฯ ... ส่วนขยายเหล่านี้ต้องการไคลเอนต์ที่เปิดใช้งานในลักษณะเดียวกันและไม่มีการใช้งานปัจจุบันกับไคลเอนต์ Windows

หมายเหตุหากพารามิเตอร์นี้เปิดใช้งานพารามิเตอร์ลิงก์แบบกว้างจะถูกปิดใช้งานโดยอัตโนมัติ

ดูพารามิเตอร์ที่อนุญาตการเชื่อมโยงแบบกว้างที่ไม่ปลอดภัยหากคุณต้องการเปลี่ยนการเชื่อมต่อระหว่างพารามิเตอร์ทั้งสองนี้

เริ่มต้น: ส่วนขยาย unix = ใช่

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

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

  1. ไคลเอ็นต์ตรวจพบวัตถุที่จะลบอย่างไม่ถูกต้องเป็นโครงสร้างโฟลเดอร์แทนที่จะเป็น symlink
  2. ไคลเอนต์ดำเนินการซ้ำในระดับที่ลึกที่สุดของต้นไม้และลบเนื้อหาทั้งหมดของโฟลเดอร์เหล่านั้น
  3. ไคลเอนต์มันทำงานกลับมาจากระดับที่ลึกที่สุดกลับไปยังโฟลเดอร์ที่คุณบอกให้ลบลบพวกเขาไป
  4. จากนั้นในที่สุดเมื่อโฟลเดอร์ว่างไคลเอ็นต์จะส่งคำสั่งเพื่อลบโฟลเดอร์
  5. อย่างไรก็ตามเนื่องจากโฟลเดอร์นั้นเป็น symlink จริงโฮสต์จะลบ symlink เท่านั้น

นี่คือวิธีที่เนื้อหาของเป้าหมายถูกลบพร้อมกับ symlink แต่ไม่ใช่โฟลเดอร์เป้าหมายจริง

ในทำนองเดียวกันเมื่อมีคำสั่งให้ลบไฟล์ symlinked เพียง symlink จะถูกลบ ปัญหาเกี่ยวกับโครงสร้างโฟลเดอร์ symlinked คือไคลเอนต์ samba ส่งคำสั่งลบไปที่เนื้อหาทั้งหมดก่อนสั่งให้เซิร์ฟเวอร์ลบ symlink ไปยังโฟลเดอร์


การผสมผสานระหว่างการเปิด / ปิดส่วนขยายยูนิกซ์และการเปิดใช้งาน / ปิดใช้งานลิงก์แบบกว้างทำให้ไม่มีความแตกต่าง ดังนั้นสิ่งที่ฉันกำลังประสบคือพฤติกรรมที่คาดหวัง ให้ฉันสรุปเพื่อให้แน่ใจว่าฉันถูกต้อง เมื่อเข้าใช้งานแซมบ้าแชร์จาก OSX: 1. การลบไฟล์ symlink จะเป็นการลบ symlink เท่านั้น 2. การลบ symlink โฟลเดอร์จะลบเนื้อหาของ symlink & โฟลเดอร์เป้าหมาย แต่ไม่ใช่โฟลเดอร์ปลายทาง ผลลัพธ์นี้ในโฟลเดอร์เป้าหมายที่ว่างเปล่า พฤติกรรมที่แปลกมาก หนึ่งจะคาดว่าโฟลเดอร์เป้าหมายจะถูกลบด้วยไม่ใช่เพียงแค่ลบเนื้อหา
Max Pfleger

ใช่ฉันเข้าใจแล้ว ขอบคุณมาก. ฉันจะต้องคิดใหม่อย่างสมบูรณ์ว่าฉันใช้โฟลเดอร์ symlinked ในการแบ่งปัน Samba ของฉันอย่างไร ขอบคุณ
Max Pfleger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.