วิธีปิดการแลกเปลี่ยนใน Linux


53

ฉันใช้เคอร์เนล 3.18.9 ที่คอมไพล์แล้วและฉันสงสัยเกี่ยวกับวิธีที่ดีที่สุดในการปิดการใช้งาน swap บนระบบ ฉันยังใช้ init หากมันสร้างความแตกต่าง

มันเพียงพอที่จะแสดงความคิดเห็นหรือลบบรรทัด swap ใน/etc/fstabเพื่อป้องกันการสลับจากการทำงาน / ติดตั้งที่บูตหรือฉันควรคอมไพล์เคอร์เนลโดยไม่Support for paging of anonymous memory (swap)ต้อง 100% แน่ใจว่ามันไม่ได้เปิดใช้งาน?

ฉันรันพาร์ติชั่นที่เข้ารหัสและต้องการป้องกันการรั่วไหลของฮาร์ดดิสก์โดยไม่ตั้งใจ ข้อมูลจำเพาะระบบของฉันนั้นยอดเยี่ยมพอที่ฉันสามารถอยู่รอดได้ในสภาพแวดล้อมที่ไม่มีการแลกเปลี่ยน


ทำไมการแลกเปลี่ยนของคุณไม่ได้เข้ารหัส?
Michael Hampton

@MichaelHampton ฉันไม่เห็นความต้องการ ณ จุดนั้นจนกว่าฉันจะรู้ว่าอะไรจะเกิดขึ้นในที่สุด รวมทั้งระบบของฉันยังไม่ถึงจุดใด ๆ ที่ใช้การแลกเปลี่ยนดังนั้นฉันรู้สึกอิสระที่จะลบ
283167

ฉันจะลบคุณสมบัติจากเคอร์เนลแล้ว ไม่เช่นนั้นใคร ๆ ก็สามารถเสียบแท่ง USB และเริ่มทำการสลับมันได้อีกครั้ง
ott--

@ott ผู้ใช้ไม่ต้องการการเข้าถึงระดับผู้ใช้ขั้นสูงเพื่อใช้งาน swapon / swapoff หรือไม่? ฉันอาจปิดการใช้งานอีกครั้งในกรณี แต่ฉันไม่แน่ใจว่าผู้ใช้ที่ไม่มีสิทธิพิเศษสามารถสร้างไฟล์สลับได้
283167

แน่นอนว่าเขาต้องการเข้าถึงผู้ใช้ขั้นสูงซึ่งเขาสามารถทำได้ด้วยการหาช่องโหว่เช่น แต่คุณกำลังดูเซิร์ฟเวอร์ของคุณ 24/7
ott--

คำตอบ:


76
  1. cat /proc/swapsระบุอุปกรณ์แลกเปลี่ยนการกำหนดค่าและไฟล์ที่มี
  2. swapoff -aปิดอุปกรณ์แลกเปลี่ยนทั้งหมดและไฟล์ที่มี
  3. ลบการอ้างอิงใด ๆ /etc/fstabที่ตรงกับที่พบใน
  4. ทางเลือก:ทำลายอุปกรณ์แลกเปลี่ยนหรือไฟล์ใด ๆ ที่พบในขั้นตอนที่ 1 เพื่อป้องกันการนำมาใช้ซ้ำ เนื่องจากข้อกังวลของคุณเกี่ยวกับการรั่วไหลของข้อมูลที่ละเอียดอ่อนคุณอาจต้องการพิจารณาดำเนินการลบข้อมูลที่ปลอดภัย

ผู้ชาย swapoff


ในบางระบบคุณต้องสร้างinitrdไฟล์เก็บถาวรอีกครั้งเช่นมีdracut --regenerate-all --forceหรือไม่mkinitrdเช่นนั้นระบบจะไม่บู๊ต ขอขอบคุณที่JO Ahoและคาร์ลอ ERalt.os.linux.suseบน
Ant_222

10

หากคุณแน่ใจจริงๆว่าคุณต้องการปิดการใช้งานการแลกเปลี่ยน (หมายเหตุ: ไม่แนะนำให้ใช้แม้ในกรณีที่คุณค่อนข้างแน่ใจว่า RAM จริงมีมากเกินพอ) ให้ทำตามขั้นตอนเหล่านี้:

  1. เรียกใช้swapoff -a: นี่จะปิดใช้งานการสลับทันที
  2. ลบรายการ swap ออกจาก /etc/fstab
  3. rebootระบบ. หากการแลกเปลี่ยนหายไปดี ถ้าด้วยเหตุผลบางอย่างมันยังอยู่ที่นี่คุณต้องลบพาร์ติชัน swap ออก ทำซ้ำขั้นตอนที่ 1 และ 2 และหลังจากนั้นใช้fdiskหรือpartedเพื่อลบพาร์ติชัน swap (ไม่ได้ใช้ในขณะนี้) ใช้ความระมัดระวังเป็นอย่างยิ่งที่นี่: การลบพาร์ติชันที่ไม่ถูกต้องจะมีผลกระทบร้ายแรง
  4. reboot

1
ทำไมถึงไม่แนะนำให้ปิดการใช้งาน swap แม้ว่าคุณจะมี ram เพียงพอหรือไม่
Rolf

1
เนื่องจาก Linux ใช้การแลกเปลี่ยนพาร์ติชั่นเชิงรุกเพื่อเพิ่มหน่วยความจำสำหรับการแคช สิ่งนี้สามารถปรับปรุงประสิทธิภาพ อย่างไรก็ตามมันเป็นพารามิเตอร์ที่ปรับค่าได้ สำหรับข้อมูลเพิ่มเติมโปรดอ่านที่นี่ ยิ่งไปกว่านั้นการเพิ่มความสามารถในการจัดสรรหน่วยความจำในระบบ swapless ที่ทำให้เกิดการทำงานของเคอร์เนล OOM killer
shodanshok

1
ขอบคุณมันสมเหตุสมผล อย่างไรก็ตามฉันคิดว่าถ้า "ram เพียงพอ" (เช่น: 8 หรือ 16 GB) เต็มแล้วก็น่าจะเป็นสถานการณ์พิเศษบางอย่าง (แอปพลิเคชันที่มีหน่วยความจำรั่วหรือปัญหาอื่น ๆ ที่ควบคุมไม่ได้โจมตี DDOS เป็นต้น) ในกรณีที่การแลกเปลี่ยนในที่สุดก็จะถูกครอบงำอยู่แล้ว บางทีฉันไม่ได้โต้แย้งที่น่าเชื่อ แต่สิ่งนี้ไม่ควรเกิดขึ้นในการใช้เดสก์ท็อปที่มีน้ำหนักเบา
Rolf

9

มันเคยเป็นเพียงการสลับพาร์ติชั่นที่/etc/fstabใช้โดยอัตโนมัติอย่างไรก็ตาม systemd อาจเปลี่ยนไปเล็กน้อย คุณอาจต้องทำ:

systemctl mask dev-sdXX.swap

(เปลี่ยน sdXX) เป็นพาร์ติชั่นสว็อปในฟอร์แมตของคุณ, ซึ่ง, ถามว่าทำไมคุณถึงมีพาร์ติชั่นสว็อปถ้าคุณไม่ต้องการให้มันใช้ ...

หากคุณไม่ได้ใช้ systemd ดังนั้นการลบรายการ swap /etc/fstabควรเพียงพอ (เท่าที่ฉันรู้)

บางทีทางออกที่แท้จริงคือการกำจัดพาร์ทิชัน swap ดังนั้นพวกเขาจะไม่ถูกใช้โดยไม่ตั้งใจ ในการลบพาร์ทิชัน swap ฉันจะใช้ fdisk เพื่อเปลี่ยนประเภทพาร์ติชั่นจาก swap เป็นอย่างอื่นจากนั้นทำการฟอร์แมตพาร์ติชั่นหรือการใช้งานใหม่: dd if=/dev/zero of=/dev/old-swap-partitionเพื่อให้พาร์ติชั่น นั้นเป็นศูนย์และป้องกันการใช้งาน

ดูเพิ่มเติมตั้งค่าการใช้งานของพาร์ทิชัน swap กับ systemd


ฉันยังคงใช้ init ผ่าน openRC ฉันตั้งใจกำจัด systemd จากการติดตั้ง และสำหรับคำถาม swap ฉันได้ทำการติดตั้งเป็นประจำจนกระทั่งฉันตัดสินใจใช้ cryptsetup / luks เพื่อเมานท์ไฟล์ที่เข้ารหัสที่ฟอร์แมตเป็น ext4 ที่ด้านบนของระบบไฟล์ของฉัน หากคุณสามารถสัมผัสวิธีปิดการแลกเปลี่ยนเมื่อใช้ init ฉันจะขอบคุณมันมาก
283167

0

เมื่อฉันดูไฟล์/ etc / fstabบน Raspbian ฉันเห็นความคิดเห็นว่า

a swapfile is not a swap partition, no line here
  use dphys-swapfile swap[on|off] for that

แต่หากต้องการปิดการใช้งานไฟล์สวอตช์ที่กำหนดรูปแบบไว้อย่างสมบูรณ์แล้วก็ใช้งานได้ดีอย่างสมบูรณ์:

swapoff -a
chmod -x /etc/init.d/dphys-swapfile
reboot

วิธีแก้ปัญหานี้ดูรวดเร็วและสกปรกสำหรับฉันอย่างไรก็ตามคุณสามารถเปิดใช้งานอีกครั้งด้วย:

chmod +x /etc/init.d/dphys-swapfile
reboot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.