Linux รู้ได้อย่างไรว่าพาร์ทิชัน swap อยู่ที่ใด?


13

ฉันอ่านแล้วว่าคุณต้องใส่พาร์ติชัน swap บน HDD แทนที่จะเป็น SSD

คำถามของฉันมีดังต่อไปนี้:

  • เมื่อใดและอย่างไรที่ "การตรวจสอบ" ทำได้โดยการกระจาย (หรืออย่างอื่น) เพื่อค้นหาพาร์ติชัน Swap ของมัน?
  • มันเกิดขึ้นระหว่างการบูทหรือไม่?
  • มันแค่ตรวจสอบดิสก์ที่มีอยู่ทั้งหมดและค้นหาพาร์ติชันที่มีการตั้งค่าสถานะ 'สลับ' หรือไม่
  • จะเกิดอะไรขึ้นถ้ามีหลายพาร์ติชั่นเช่นนั้น?
  • นอกจากนี้ฉันต้องมีพาร์ติชั่นแลกเปลี่ยนกี่อันถ้าฉันใช้, ตัวอย่างเช่น, ดิสทริบิวชันต่างกันสองตัวบนดิสก์เดียวกัน, สมมติว่า Fedora และ Ubuntu

17
โปรดทราบว่าจริงๆแล้ว swap บน SSD นั้นเป็น swap ที่ยอดเยี่ยมจริงๆ (macOS นั้นทำมานานแล้ว) อย่างไรก็ตามมันจะทำการอ่าน / เขียนเพิ่มเติมไปยัง SSD ซึ่งอาจลดอายุการใช้งาน
Nonyme

20
คุณอ่านว่า swap ควรอยู่ที่ HDD ไม่ใช่ SSD ได้ที่ไหน นอกจากนี้บทความหรือความคิดเห็นนั้นอายุเท่าไหร่? SSD สมัยใหม่นั้นดีกว่าในการปรับระดับการสึกหรอและไม่ล้มเหลวหลังจากเขียนซ้ำในแบบที่ทำเมื่อ SSD ใหม่ นอกจากนี้หากคุณมีคอมพิวเตอร์ที่มี SSD เพียงอย่างเดียวคุณก็ไม่มีทางเลือกมากนักนอกจากจะไม่ใช้ swap เลย
JDS

2
@zakinster: จะเกิดอะไรขึ้นเมื่อไดรฟ์ 1TB เต็มอยู่เสมอ ความต้องการพื้นที่เก็บข้อมูลเพิ่มขึ้นตามข้อกำหนดการจัดเก็บ
Lightness Races ในวงโคจร

3
กล่าวอีกนัยหนึ่ง "ใช่ฉันเห็นด้วยตรงกันข้ามกับคำสั่งก่อนหน้าของฉันขนาดจริงของดิสก์ไม่เกี่ยวข้อง - เป็นจำนวนเท่าใดคุณใช้"
Lightness Races ใน Orbit

6
@DavidSchwartz และหากคุณ "ใช้ swap ในจำนวนที่มีนัยสำคัญ" ในขณะที่ SSD จะทำให้ประสิทธิภาพการทำงานของระบบลดลงเมื่อเทียบกับ HDD ตัวเลือกที่ดีกว่าจะยังคงเพิ่ม RAM ให้กับระบบหรือลดความเสมือน footprint หน่วยความจำของเวิร์กโหลดของคุณในบางวิธีเพื่อหยุดการใช้ swap อย่างมีนัยสำคัญ โปรดทราบว่ามีความแตกต่างระหว่างระบบที่ใช้เวลานานซึ่งเต็มไปด้วยการแลกเปลี่ยนกับข้อมูลที่แทบไม่เคยใช้กับระบบที่มีการแลกเปลี่ยนและสแกนอย่างแข็งขัน ...
twalberg

คำตอบ:


24

พื้นที่สวอปที่กำหนดค่าแบบคงที่ (ชนิดที่ใช้ในการกระจายข้อมูลค่อนข้างมาก) ได้รับการกำหนดค่า/etc/fstabเช่นเดียวกับระบบไฟล์

รายการทั่วไปดูเหมือนว่า:

UUID=21618415-7989-46aa-8e49-881efa488132    none    swap     sw      0  0

คุณอาจเห็นdiscardหรือnofailระบุในฟิลด์ค่าสถานะ (ฟิลด์ที่สี่) ทุกบรรทัดดังกล่าวสอดคล้องกับพื้นที่สว็อปหนึ่ง (ไม่จำเป็นต้องเป็นพาร์ติชันคุณสามารถมีไฟล์สว็อปหรือแม้แต่ดิสก์สว็อปทั้งหมด)

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

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

เมื่อคุณไปเรียกใช้ตัวติดตั้งสำหรับการแจกจ่ายหลัก ๆ เกือบทั้งหมด (รวมถึง Fedora, OpenSUSE, Linux Mint, Debian และ Ubuntu) มันจะตรวจจับการสลับพาร์ติชั่นที่มีอยู่ในระบบและเพิ่มการตั้งค่าสำหรับการแจกจ่ายที่คุณ การติดตั้ง (ยกเว้นอาจเป็นไปได้หากคุณเลือกการแบ่งพาร์ติชันด้วยตนเอง) และในกรณีส่วนใหญ่สิ่งนี้จะส่งผลให้ระบบมีการกำหนดค่าในลักษณะที่เหมาะสม

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


หากคุณมีลินุกซ์ distro 2 ตัวคุณอาจมีหนึ่ง swap partition สำหรับระบบ ... ดังนั้นคุณอาจลองจำศีลและกลับมาทำงานต่อ ... (ควรใช้ผู้ใช้ BTW ที่แตกต่างกันและคุณควรต้องการ/tmpพาร์ทิชัน / ไดเรกทอรีที่ต่างกัน) อาจจะอยู่ในกรณีที่ว่ามันจะดีกว่าที่จะมีเครื่องเสมือน ...
แฮสเธอร์

ดังนั้นสิ่งที่แนะนำให้ทำถ้าพวกเขามีพาร์ติชั่นเฉพาะสำหรับการแลกเปลี่ยนบน SSD เดียวกันกับที่ติดตั้งบนระบบปฏิบัติการ Linux อย่างไรก็ตามดูเหมือนว่าจะไม่มีการสลับหรือใช้งานจริง ถ้าฉันวิ่งsystemctl --all | grep swapฉันจะได้ผลลัพธ์สองอันกลับมา dev-disk-by\x2duuid-1c692cc4\x2df942\x2d4478\x2dad0f\x2d266b7484273a.swapและswap.targetทั้งสองซึ่งเป็นACTIVE = ไม่ได้ใช้งานและSUB = ตาย ฉันจะทำให้ระบบใช้พื้นที่สว็อปได้อย่างไร?
Rockin4Life33

21

สมมติว่า Fedora และ Ubuntu?

…ทั้งสองอย่างนี้เป็นระบบปฏิบัติการในปัจจุบัน

เกิดอะไรขึ้นในระบบปฏิบัติการ systemd

กลไกพื้นเมือง

Systemd มีหน่วยงานหลายประเภท .mountไฟล์หน่วยสั่งให้มันเมานต์ไดรฟ์ .swapไฟล์ยูนิตสั่งให้บอกเคอร์เนลเกี่ยวกับการสลับพาร์ติชั่น ( .serviceไฟล์หน่วยจะบอกวิธีการเรียกใช้บริการและอื่น ๆ ) สิ่งเหล่านี้เป็นกลไกของระบบดั้งเดิม ในการออกกฎหมายพวกเขา systemd จะหยุดกระบวนการลูกที่ทำให้การเรียกระบบที่เกี่ยวข้อง

หากคุณใช้systemctlคำสั่ง (พร้อม--all) บนระบบปฏิบัติการ systemd มันจะบอกคุณเกี่ยวกับ.swapหน่วยที่โหลด ตัวอย่างเช่น:

dev-disk-by \ x2dpartuuid-40549710 \ x2d05.swap ถูกโหลดที่แอ็คทีฟอยู่ / dev / ดิสก์ / by-partuuid / 40549710-05
dev-disk-by \ x2duuid-1bb589e8 \ x2d929f \ x2d4041 \ x2d81f4 \ x2dff2b339b4e2a.swap โหลดแอ็คทีฟที่ใช้งาน / dev / ดิสก์ / โดย -uuid / 1bb589e8-929- 4041-81F4F33
dev-sda5.swap ถูกโหลดใช้งานอยู่ / dev / sda5

นอกจากนี้ยังจะบอกคุณเกี่ยวกับ.mountหน่วย

ผู้ดูแลระบบจริงสามารถเขียนเช่น.swapไฟล์หน่วยด้วยมือเช่นเดียวกับ XE สามารถเขียน.service, .socketและไฟล์หน่วยงานอื่นด้วยมือ systemd ตัวเองแค่มองหาไฟล์หน่วยในระบบไฟล์ มันเป็นกลไกดั้งเดิม

หนึ่งสามารถรับ systemd เพื่อแสดงสิ่งที่อยู่ในไฟล์หน่วยเหล่านี้และในระบบไฟล์ที่พวกเขาสามารถพบได้:

$ systemctl cat dev-disk-by \\ x2duuid-1bb589e8 \\ x2d929f \\ x2d4041 \\ x2d81f4 \\ x2dff2b339b4e2a.swap 
# /run/systemd/generator/dev-disk-by\x2duuid-1bb589e8\x2d929f\x2d4041\x2d81f4\x2dff2b339b4e2a.swap
# สร้างโดยอัตโนมัติโดย systemd-fstab-generator

[Unit]
SourcePath = etc / fstab /
เอกสาร = คน: fstab (5) คน: systemd-fstab-generator (8)

[Swap]
อะไร = / dev / ดิสก์ / โดย uuid / 1bb589e8-929f-4041-81f4-ff2b339b4e2a
ตัวเลือก = SW
$ 

สร้างไฟล์หน่วยโดยอัตโนมัติ

หนึ่งสามารถเขียนด้วยมือ โดยปกติแต่ดังกล่าว.mountและ.swapไฟล์หน่วยสร้างขึ้นโดยอัตโนมัติโดยโปรแกรมที่รู้จักกันเป็นเครื่องกำเนิดไฟฟ้า สองเครื่องปั่นไฟดังกล่าวและsystemd-fstab-generator systemd-gpt-auto-generatorพวกเขาทั้งสองวิ่งในช่วงต้นกระบวนการบูตและในการตอบสนองต่อsystemctl daemon-reloadคำสั่ง (ตามที่คุณสามารถดูด้านบน) /run/systemd/พวกเขาสร้างโหลดทั้งไฟล์หน่วยเป็นไดเรกทอรีย่อยที่ไม่มีเอกสารใน systemd เองใช้ไฟล์หน่วยที่สร้างขึ้นเอง

ตัวสร้างเดิมอ่าน/etc/fstabโดยคำนึงถึงส่วนขยาย systemd หลายรูปแบบของไฟล์นั้น ขณะที่ผมชี้ให้เห็นในความคิดเห็นคำตอบประเพณีพาร์ทิชันแลกเปลี่ยนมีติดประเภทของswและนั่นคือวิธีการหนึ่งที่จะพบว่าระบบปฏิบัติการอื่น ๆ รับรู้แลกเปลี่ยนระเบียนในตารางนี้ แต่โปรแกรมลีนุกซ์ได้เลือกวิธีการจดจำประเภท VFSแทนโดยมองหาswapเป็นประเภท VFS systemd-fstab-generatorไม่มีข้อยกเว้นที่นี่และเป็นวิธีตีความ/etc/fstabเมื่อแปลงเป็นกลไกดั้งเดิม

ตัวสร้างหลังประมวลผลตารางพาร์ติชัน EFI ที่อยู่บนดิสก์แผ่นเดียวที่เก็บพาร์ติชันระบบ EFI ค้นหารายการตารางพาร์ติชัน EFI ที่มีGUID ชนิดพาร์ติชันที่รู้จักกันดีหลายรายการ หนึ่งใน GUID เหล่านั้นคือ GUID ทั่วไปที่กำหนดให้กับพาร์ทิชันสลับ Linux; และถ้าsystemd-gpt-auto-generatorพบพาร์ติชันที่มี GUID นั้น (ที่ตรงตามเกณฑ์ที่กำหนดใน systemd doco) มันจะสร้าง.swapยูนิตให้ ไม่มี/etc/fstabส่วนเกี่ยวข้องเลย

แน่นอนกระบวนการนี้มีผลข้างเคียงมากมาย ตัวอย่างเช่นเนื่องจาก/etc/fstabไม่มีคีย์หลักในตารางระเบียนจึงสามารถมีฟิลด์ "ข้อมูลจำเพาะ" และ "ไฟล์" ที่ซ้ำกัน (เช่น "อะไร" และ "ที่ไหน") ในกลไกเนทีฟ systemd แม้ว่าฟิลด์ "ไฟล์" (เช่น "ที่ไหน") เป็นคีย์เฉพาะสำหรับ.mountหน่วยที่ฝังอยู่ในชื่อหน่วย ไม่มีสอง.mountหน่วยที่สามารถแชร์ได้ สำหรับ.swapหน่วยฟิลด์ "spec" (เช่น "what") คือคีย์เฉพาะสำหรับหน่วย ไม่มีสอง.swapหน่วยที่สามารถแชร์ได้ ดังนั้นไม่ใช่ทุกเร็กคอร์ดใน/etc/fstabที่แปลงสภาพเป็นกลไกดั้งเดิมและจะทำงานได้โดยเฉพาะอย่างยิ่งถ้าคนทำสิ่งต่าง ๆ เช่นรายการจุดเมานท์เดียวกันสำหรับสองวัตถุประสงค์ที่แตกต่างกันหรือรายการพาร์ทิชัน swap เดียวกันในสองวิธีที่ต่างกัน

ในทำนองเดียวกันเนื่องจากมีการแปล/etc/fstabเป็นกลไกเนทีฟและกลไกเนทีฟของ systemd มีวิธีอื่นในการเปิดใช้งานยูนิตลักษณะการทำงานจึงแตกต่างอย่างละเอียดกับระบบปฏิบัติการที่ไม่ใช่ systemd .mountหน่วยจะตามค่าเริ่มต้นจะเปิดใช้งานโดยอัตโนมัติsystemd-udevdแม้หลังจากบูตในการตอบสนองต่อการปรากฏตัวของอุปกรณ์จัดเก็บข้อมูลที่ติดตั้ง หรือมันสามารถถูกระบุว่าเป็นWants=หรือRequires=บางส่วน.serviceหรือ.socketหน่วยซึ่งหมายความว่ามันจะเปิดใช้งาน (อีกครั้ง) เมื่อพวกเขา RequiresMountsFor=แม้จะมี

โปรแกรมติดตั้งและวิธี systemd

ตามเนื้อผ้าระบบการติดตั้งโปรแกรมและผู้ดูแลระบบ systemd ปฏิบัติการหลังจากนั้นกำหนดค่าระบบได้เขียนรายการไปsw /etc/fstabและนั่นคือวิธีที่ชาวพื้นเมือง.mountและ.swapหน่วยท้ายที่สุดถูกสร้างขึ้นโดยอัตโนมัติ ยูทิลิตีการติดตั้ง / การกำหนดค่า "รู้" ว่าใส่ไฟล์ swap ไว้ที่ไหนเพราะในส่วนต่อประสานผู้ใช้ผู้ดูแลระบบได้ทำการเลือกบางอย่างแล้วเขียนการ/etc/fstabจับคู่ บางครั้งตัวเลือกนั้นคือฉันต้องการให้คุณทำให้ฉันเป็นพาร์ติชันการแลกเปลี่ยนเป็นส่วนหนึ่งของการติดตั้ง ; บางครั้งมันก็แค่ใช้ swap partition ที่คุณพบแล้วในแผ่นดิสก์ (ผู้ติดตั้งมองที่ประเภทพาร์ทิชันด้วย)

แต่คน systemd มีความคิดเกี่ยวกับระบบปฏิบัติการที่กำหนดค่าอัตโนมัติจาก/etcต้นไม้ที่ว่างเปล่าส่วนใหญ่ที่เรียกว่าระบบไร้สัญชาติและนั่นคือกลไกเช่นเครื่องกำเนิดไฟฟ้าที่อ่านตารางพาร์ติชัน EFI ทั้งหมด ในแผนคน systemd ของไม่มี/etc/fstabและแน่นอนไม่มีข้อมูลการกำหนดค่าถาวรภายใต้/etcที่ทุกคนและทุกสิ่งนี้จะอนุมานได้จากเนื้อหาของตารางพาร์ทิชันบนดิสก์systemctl daemon-reloadในทุกบูตและในทุก พวกเขาได้รับในปัจจุบันการส่งเสริมระบบปฏิบัติการติดตั้งโปรแกรมกว่าไม่ได้เขียน/etc/fstab

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

ในรูปแบบ systemd แม้ว่าระบบปฏิบัติการยังไม่เป็นคน systemd มองเห็นมันและ "ไร้สัญชาติ" เครื่องปั่นไฟดังกล่าวทำงาน และทุกส่วนของการสลับพาร์ติชั่น (บนแผ่นดิสก์ ESP / รูท) ที่มีประเภทพาร์ติชันที่จำเป็นนั้นจะถูกใช้โดยระบบปฏิบัติการ systemd ทั้งหมดโดยอัตโนมัติ เนื่องจากพวกเขาจะแชร์พาร์ทิชัน swap ที่ค้นพบทั้งหมดโดยอัตโนมัติพาร์ติชั่นหนึ่งจึงไม่จำเป็นต้องสร้างพาร์ติชั่นสว็อปหนึ่งตัวต่อระบบปฏิบัติการที่ติดตั้งไว้

อ่านเพิ่มเติม


ดีมาก - ขอบคุณสำหรับคำอธิบาย!
Andy Dalton

มีส่วนหนึ่งของฉันที่ต้องการลงคะแนนคุณเพียงแค่พูดถึง systemd แต่แน่นอนว่าไม่เป็นธรรม (และ systemd หรือไม่ไม่ได้หมายความว่าคุณผิด) และโดยทั่วไปแล้วฉันไม่ลงคะแนนอะไรเลย อย่างไรก็ตามมันเป็นบทความที่ดีดังนั้นแม้จะเห็นการอ้างอิงถึง Lennart ฉันได้คะแนนโหวตคำตอบนี้แล้ว หากไม่มีสิ่งใดที่คุณใช้ความพยายามและควรได้รับการยกย่อง ฉันได้อ่านสั้น ๆ เกี่ยวกับขยะไร้สัญชาติและนั่นเป็นสิ่งที่ค่อนข้าง ... ฉันไม่แน่ใจด้วยซ้ำว่ามันจะเป็นเช่นไรฉันจะทิ้งมันไว้ที่นั้น
Pryftan

13

อดีตพาร์ทิชัน swap จะถูกระบุไว้ในที่มีการเข้ามาของพิมพ์/etc/fstab swapในการบูตกระบวนการเริ่มต้นจะอ่านไฟล์นั้นและผลักดันการกำหนดค่านั้นลงในเคอร์เนล

ตัวอย่างของรายการ/etc/fstabคือ:

/dev/sdb    none    swap     sw      0  0

ฉันไม่คุ้นเคยกับวิธีการsystemdจัดการ swap แต่ฉันเชื่อว่าผลลัพธ์ที่ได้จะเหมือนกัน: กระบวนการ userspace รับรู้ว่าพื้นที่ใดที่ถูกจัดสรรสำหรับการแลกเปลี่ยนและกระบวนการ userspace แจ้งเคอร์เนล


ผู้ถามถามเกี่ยวกับ Linux และสิ่งนี้ไม่ผิดสำหรับ Linux แต่มันก็แปลกกับลีนุกซ์ ระบบปฏิบัติการอื่น ๆ เช่น FreeBSD รู้จักการบันทึกเรคคอร์ด/etc/fstabจากswประเภทการเมานท์มากกว่าจากswapประเภท VFS
JdeBP

1
คำตอบไม่ได้ตอบคำถามทุกข้อ
Sergiy Kolodyazhnyy

ฉันควรชี้ให้เห็นว่าคำตอบนี้เกินไปในโลกของระบบปฏิบัติการ systemd systemd-gpt-auto-generatorมันล้มเหลวที่จะเข้าบัญชี
JdeBP

2
คุณหมายถึงอะไร systemd ไม่ได้ใช้ fstab? แน่นอนมัน!
psusi

1
@psusi: systemd เข้าใจ แต่ไม่ต้องการ fstab
MSalters

4

คำตอบอื่น ๆ ทั้งหมดพูดถึงวิธีการชี้ไปที่ระบบไฟล์สลับตอนบูต

อย่างไรก็ตามมีหลายจุดที่จะเพิ่มไปยังคำตอบอื่น ๆ :

  • พื้นที่สว็อปสามารถเป็นไฟล์ได้
  • พาร์ทิชันพื้นที่สว็อปจะถูกทำเครื่องหมายเป็นประเภท 0x82
  • คุณสามารถติดตั้งพื้นที่สว็อปได้ทุกเมื่อในเวลาทำงาน
  • สำหรับการทำเครื่องหมาย / initialising พาร์ทิชัน / file ให้มันได้รับการยอมรับและใช้งาน / ติดตั้งในภายหลังเป็นพื้นที่ swap คุณจะต้องใช้คำสั่งmkswap;
  • สำหรับการเปิดใช้งาน / ใช้ swap partition / ไฟล์ด้วยมือคุณใช้คำสั่งswapon;
  • swapoffเช่นเดียวกันสำหรับการแลกเปลี่ยนมันออกไปกับคุณ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.