ข้อดี / ข้อเสียของการพุ่งพรวดและ systemd คืออะไร?


183

มันจะปรากฏsystemdเป็นร้อนใหม่initระบบในบล็อกเดียวกับพุ่งพรวดเป็นไม่กี่ปีที่ผ่านมา ข้อดี / ข้อเสียของแต่ละข้อคืออะไร? นอกจากนี้แต่ละระบบยังเปรียบเทียบกับระบบเริ่มต้นอื่น ๆ ได้อย่างไร


4
@keith iirc openrc ใช้ SysV เพียงอย่างเดียวข้อดีคือชุดสะสมของสคริปต์เริ่มต้นที่ใช้องค์ประกอบทั่วไปและพกพาได้ (หมายถึงทำงานบนเชลล์ใด ๆ ) เป็นการทำความสะอาดที่ดี แต่ไม่ใช่การเริ่มต้นใหม่จริงๆ
xenoterracide

@xeno มันทำ แต่คุณไม่สามารถบอกได้จริงๆ ไม่มี rcX.d หรือ [KS] symlink เลย ที่จริงแล้ว sysv init เองนั้นมีความยืดหยุ่นค่อนข้างสวยและ runlevels นั้นไม่ได้ใช้งานตามปกติ
Keith

แม้ว่าผู้เขียนบล็อกนี้จะขัดกับ systemd ฉันขอแนะนำให้อ่าน มันจะไปข้อดีและข้อเสียของ systemd และ BSD init textplain.net/blog/2015/…
Peschke

1
โปรดอ่าน 2016 อัปเดตunix.stackexchange.com/a/287282/49091ด้วย
igaurav

ข้อได้เปรียบที่อ้างว่าของ systemd จะไม่เกิดขึ้นภายใน 100 ปีเพื่อชดเชยค่าใช้จ่ายที่เกิดขึ้นกับโลกในการดำเนินการนี้ ทุกนาทีหรือชั่วโมงหรือวันที่ผู้ดูแลระบบ Unix จัดการกับขยะนี้จะต้องเพิ่มขึ้นเป็นพันล้านและเพื่อประโยชน์ที่แท้จริงอื่น ๆ นอกเหนือจากเสียงระฆังและเสียงนกหวีด?
Waslap

คำตอบ:


90

อัพเดทปี 2016

คำตอบส่วนใหญ่ที่นี่มีอายุห้าขวบจึงถึงเวลาสำหรับการอัปเดตบางอย่าง

อูบุนตูเคยใช้งานเครื่องพุ่งพรวดโดยปริยาย แต่พวกเขาก็ทิ้งไว้เมื่อปีที่แล้วเพื่อประโยชน์ของ systemd - ดู:

เนื่องจากการที่มีบทความดี ๆSystemd สำหรับผู้ใช้พุ่งพรวดบน Ubuntu wiki - การเปรียบเทียบรายละเอียดมากระหว่าง upstart และ systemd และคู่มือการเปลี่ยนจากพุ่งพรวดเป็น systemd

(โปรดทราบว่าตามวิกิ Ubuntuคุณยังสามารถเรียกใช้พุ่งพรวดบน Ubuntu รุ่นปัจจุบันโดยค่าเริ่มต้นโดยการติดตั้งupstart-sysvและเรียกใช้sudo update-initramfs -uแต่พิจารณาขอบเขตของโครงการ systemd ฉันไม่ทราบวิธีการทำงานในทางปฏิบัติหรือไม่ว่า systemd เป็นหรือไม่ สามารถถอนการติดตั้ง)

ข้อมูลส่วนใหญ่ในส่วนคำสั่งและสคริปต์ด้านล่างได้รับการดัดแปลงจากตัวอย่างบางส่วนที่ใช้ในบทความนั้น (ซึ่งได้รับอนุญาตอย่างสะดวกสบายเช่นเดียวกับการมีส่วนร่วมของผู้ใช้ Stack Exchange ภายใต้สิทธิ์การใช้งาน Creative Commons Attribution-ShareAlike 3.0 )

นี่คือการเปรียบเทียบคำสั่งทั่วไปและสคริปต์อย่างง่าย ๆ ดูหัวข้อด้านล่างสำหรับคำอธิบายโดยละเอียด คำตอบนี้เป็นการเปรียบเทียบพฤติกรรมเก่าของระบบที่ใช้ระบบพุ่งพรวดกับพฤติกรรมใหม่ของระบบที่ใช้ระบบตามที่ถามในคำถาม แต่โปรดทราบว่าคำสั่งที่ติดแท็กเป็น "ระบบพุ่งพรวด" ไม่จำเป็นต้องเป็นระบบพุ่งพรวดเฉพาะ - เป็นเรื่องปกติสำหรับทุกระบบที่ไม่ใช่ systemd Linux และ Unix

คำสั่ง

ใช้งาน su:

  • พุ่งพรวด: su
  • systemd: machinectl shell

(ดูหัวข้อ "การแทนที่คำสั่ง su" ด้านล่าง)

วิ่งหน้าจอ:

  • พุ่งพรวด: screen
  • systemd: systemd-run --user --scope screen

(ดูส่วน "การฆ่ากระบวนการพื้นหลังที่ไม่คาดคิด" ด้านล่าง)

ใช้ tmux:

  • พุ่งพรวด: tmux
  • systemd: systemd-run --user --scope tmux

(ดูส่วน "การฆ่ากระบวนการพื้นหลังที่ไม่คาดคิด" ด้านล่าง)

การเริ่มงาน foo:

  • พุ่งพรวด: start foo
  • systemd: systemctl start foo

การหยุดงาน foo:

  • พุ่งพรวด: stop foo
  • systemd: systemctl stop foo

การเริ่มงานใหม่ foo:

  • พุ่งพรวด: restart foo
  • systemd: systemctl restart foo

รายการงาน:

  • พุ่งพรวด: initctl list
  • systemd: systemctl status

การตรวจสอบการกำหนดค่าของ job foo:

  • พุ่งพรวด: init-checkconf /etc/init/foo.conf
  • systemd: systemd-analyze verify /lib/systemd/system/foo.service

การระบุตัวแปรสภาพแวดล้อมของงาน:

  • พุ่งพรวด: initctl list-env
  • systemd: systemctl show-environment

การตั้งค่าตัวแปรสภาพแวดล้อมของงาน:

  • พุ่งพรวด: initctl set-env foo=bar
  • systemd: systemctl set-environment foo=bar

การลบตัวแปรสภาพแวดล้อมของงาน:

  • พุ่งพรวด: initctl unset-env foo
  • systemd: systemctl unset-environment foo

ท่อน

ในพุ่งพรวดบันทึกเป็นไฟล์ข้อความปกติในไดเรกทอรี / var / log / upstart ดังนั้นคุณสามารถประมวลผลได้ตามปกติ:

cat /var/log/upstart/foo.log
tail -f /var/log/upstart/foo.log

ในบันทึกของ systemd จะถูกเก็บไว้ในรูปแบบไบนารีภายใน (ไม่ใช่ไฟล์ข้อความ) ดังนั้นคุณต้องใช้journalctlคำสั่งเพื่อเข้าถึง:

sudo journalctl -u foo
sudo journalctl -u foo -f

สคริป

ตัวอย่างสคริปต์ธรรมดาที่เขียนใน/etc/init/foo.conf:

description "Job that runs the foo daemon"
start on runlevel [2345]
stop on runlevel [016]
env statedir=/var/cache/foo
pre-start exec mkdir -p $statedir
exec /usr/bin/foo-daemon --arg1 "hello world" --statedir $statedir

ตัวอย่างสคริปต์ systemd ที่เขียนใน/lib/systemd/system/foo.service:

[Unit]
Description=Job that runs the foo daemon
Documentation=man:foo(1)
[Service]
Type=forking
Environment=statedir=/var/cache/foo
ExecStartPre=/usr/bin/mkdir -p ${statedir}
ExecStart=/usr/bin/foo-daemon --arg1 "hello world" --statedir ${statedir}
[Install]
WantedBy=multi-user.target

การแทนที่คำสั่ง su

การsuแทนที่คำสั่งถูกรวมเข้ากับ systemd ในคำขอดึง # 1022:

เพราะตามเลนนาร์ตโพ็ตเตอริ ง , "su เป็นจริงแนวคิดเสีย"

เขาอธิบายว่า"คุณสามารถใช้ su sudo และเป็นมาก่อน แต่ไม่ได้คาดหวังว่ามันจะทำงานในเต็มรูปแบบ "

วิธีการอย่างเป็นทางการเพื่อให้บรรลุsuพฤติกรรมที่คล้ายกันคือตอนนี้:

machinectl shell

มีการอธิบายเพิ่มเติม โดย Lennart Poettering ในการอภิปรายเพื่อออก # 825:

"มีการพูดคุยกันมานานเกี่ยวกับเรื่องนี้ แต่ปัญหาก็คือสิ่งที่ซูควรทำนั้นไม่ชัดเจนมาก [... ] เรื่องสั้นเรื่องสั้น: su เป็นแนวคิดที่แตกสลายจริง ๆ แล้วมันจะทำให้คุณเป็นเหมือนเปลือกหอย และมันก็ดีที่จะใช้มัน แต่นั่นไม่ใช่การเข้าสู่ระบบที่สมบูรณ์และไม่ควรเข้าใจผิดว่าเป็นอย่างใดอย่างหนึ่ง " - Lennart Poettering

ดูสิ่งนี้ด้วย:

การฆ่ากระบวนการพื้นหลังที่ไม่คาดคิด

คำสั่งที่ชอบ:

ไม่ทำงานตามที่คาดไว้ ตัวอย่างเช่นnohupเป็นคำสั่ง POSIX เพื่อให้แน่ใจว่ากระบวนการทำงานต่อไปหลังจากที่คุณออกจากระบบ มันไม่ทำงานบน systemd อีกต่อไป นอกจากนี้โปรแกรมที่ต้องการscreenและtmuxจำเป็นต้องเรียกใช้ในลักษณะพิเศษมิฉะนั้นกระบวนการที่คุณใช้กับโปรแกรมจะถูกฆ่า (ในขณะที่ไม่ได้รับกระบวนการที่ถูกฆ่ามักเป็นสาเหตุหลักของการเรียกใช้หน้าจอหรือ tmux ในตอนแรก)

นี่ไม่ใช่ความผิดพลาด แต่เป็นการตัดสินใจโดยเจตนาดังนั้นจึงไม่น่าจะมีการแก้ไขในอนาคต นี่คือสิ่งที่ Lennart Poettering พูดเกี่ยวกับปัญหานี้:

ในมุมมองของฉันมันค่อนข้างแปลกที่ UNIX นั้นโดยค่าเริ่มต้นปล่อยให้รหัสผู้ใช้เองตามอำเภอใจไม่ จำกัด หลังจากออกจากระบบ ได้มีการพูดคุยกันมานานแล้วในหมู่คน OS หลาย ๆ คนซึ่งสิ่งนี้ควรเป็นไปได้ แต่ไม่แน่นอนว่าเป็นค่าเริ่มต้น แต่ไม่มีใครกล้าที่จะพลิกสวิตช์เพื่อเปลี่ยนจากค่าเริ่มต้นเป็นตัวเลือก การไม่ทำความสะอาดเซสชันผู้ใช้หลังจากออกจากระบบไม่เพียง แต่น่าเกลียดและค่อนข้างแฮ็ก แต่ยังเป็นปัญหาด้านความปลอดภัย ในที่สุด systemd 230 ก็พลิกสวิตช์และในที่สุดก็ทำความสะอาดทุกอย่างได้อย่างถูกต้องเมื่อผู้ใช้ออกจากระบบ

สำหรับข้อมูลเพิ่มเติมดู:

แนวคิดการเริ่มต้นระดับสูง

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

นี่คือวิธีที่Systemd สำหรับผู้ใช้พุ่งพรวดอธิบาย:

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

โมเดลของsystemdสำหรับกระบวนการเริ่มต้น (หน่วย) คือ "อิงการพึ่งพาแบบอิง" คือหน่วยจะเริ่มทำงานก็ต่อเมื่อและเมื่อยูนิตเริ่มต้นอื่น ๆ ขึ้นอยู่กับมัน ในระหว่างการบู๊ต systemd จะเริ่ม "รูทยูนิต" (default.target สามารถแทนที่ได้ในด้วง) ซึ่งจะขยายและเริ่มขึ้นต่อเนื่อง หน่วยใหม่ต้องเพิ่มตัวเองเป็นการพึ่งพาหน่วยของลำดับการบู๊ต (โดยทั่วไปคือ multi-user.target) เพื่อให้สามารถใช้งานได้

การใช้งานในการแจกแจง

ตอนนี้มีข้อมูลล่าสุดตาม Wikipedia:

การแจกแจงที่ใช้พุ่งพรวดโดยค่าเริ่มต้น:

การแจกแจงโดยใช้ systemd โดยค่าเริ่มต้น:

  • Arch Linux - ตั้งแต่ตุลาคม 2012
  • CentOS - ตั้งแต่เมษายน 2014 (7.14.04)
  • CoreOS - sice ตุลาคม 2556 (v94.0.0)
  • Debian - ตั้งแต่เมษายน 2015 (v8)
  • Fedora - ตั้งแต่พฤษภาคม 2011 (v15)
  • Mageia - ตั้งแต่พฤษภาคม 2012 (v2.0)
  • openSUSE - ตั้งแต่กันยายน 2555 (v12.2)
  • Red Hat Enterprise Linux - ตั้งแต่มิถุนายน 2014 (v7.0)
  • SUSE Linux Enterprise Server - ตั้งแต่เดือนตุลาคม 2014 (v12)
  • Ubuntu - ตั้งแต่เดือนเมษายน 2558 (v15.04)

(ดูวิกิพีเดียสำหรับข้อมูลล่าสุด)

การแจกแจงโดยไม่ใช้ทั้งการพุ่งพรวดหรือ systemd:

การทะเลาะวิวาท

ในอดีตที่ผ่านส้อมของ Debian ได้รับการเสนอเพื่อหลีกเลี่ยงการ systemd Devuan GNU + ลินุกซ์ถูกสร้างขึ้น - แยกของ Debian โดยไม่ต้อง systemd (ขอบคุณfpmurphy1สำหรับการชี้มันออกมาในการแสดงความคิดเห็น)

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการโต้แย้งนี้ดู:

อย่างที่หลายคนอาจจะรู้แล้วการออกเสียงลงคะแนน Init GR Debian ที่ได้รับการสนับสนุนโดย Ian Jackson นั้นไม่มีประโยชน์ในการปกป้องมรดกของ Debian และผู้ใช้จากหิมะถล่ม systemd

สถานการณ์นี้ทำให้เกิดการล็อคในการพึ่งพา systemd ซึ่งเป็นสิ่งที่คุกคามความเป็นอิสระของการพัฒนาและมีผลกระทบร้ายแรงสำหรับ Debian, ต้นน้ำและปลายน้ำ

CTTE จัดการเพื่อสลับการพึ่งพาและทำให้เรามีเวลาในการติดตั้ง systemd ผ่าน sysvinit ที่ละเอียดอ่อน แต่กระบวนการนี้ก็เหนื่อยและเต็มไปด้วยละคร ในที่สุดหนึ่งสัปดาห์ที่ผ่านมา Ian Jackson ลาออก [ ... ]

ฉันลาออกจากคณะกรรมการด้านเทคนิคโดยมีผลทันที

ในขณะที่มันเป็นสิ่งสำคัญที่มุมมองของ 30-40% ของโครงการที่เห็นด้วยกับฉันควรจะยังคงเป็นตัวแทนใน TC ฉันเองก็เห็นได้ชัดว่าการโต้เถียงมากเกินไปตัวเลข ณ จุดนี้ที่จะทำ ฉันควรหลีกเลี่ยงการพยายามลดขอบเขตการสนทนาเกี่ยวกับการกำกับดูแลของโครงการให้เป็นแบบส่วนบุคคล [ ... ]

Devuan เกิดจากการทะเลาะวิวาทกับการตัดสินใจใช้เป็นระบบเริ่มต้นสำหรับเดเบียน ตำแหน่งอย่างเป็นทางการใน Debian systemdเต็มของการเรียกร้องที่คนอื่น ๆ ได้ debunked ผู้อ่านที่สนใจสามารถดำเนินการต่อการอภิปรายหัวข้อร้อนนี้ในการโต้เถียง systemd อย่างไรก็ตามเราขอแนะนำให้คุณรักษาความสงบและเสียงของคุณ ที่ Devuan เราสนใจที่จะเขียนโปรแกรมผิดมากกว่ามองย้อนกลับไป [ ... ]

มีการสร้างเว็บไซต์และบทความบางส่วนสำหรับข้อพิพาทของ systemd:

มีการสนทนาที่น่าสนใจมากมายเกี่ยวกับ Hacker News:

แนวโน้มที่คล้ายกันใน distros อื่น ๆ สามารถสังเกตได้เช่นกัน:

ปรัชญา

พุ่งพรวดตามปรัชญา Unix ของ DOTADIW - "ทำสิ่งหนึ่งและทำมันได้ดี" มันเป็นการทดแทนสำหรับ init daemon ดั้งเดิม มันไม่ได้ทำอะไรนอกจากการเริ่มและหยุดบริการ งานอื่น ๆ จะมอบหมายให้กับระบบย่อยพิเศษอื่น ๆ

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

แผนการขยายตัว

ตามมุมมองของ systemd สิ่งที่ประสบความสำเร็จและการนำเสนอสิ่งที่อยู่ข้างหน้าโดย Lennart Poettering ในปี 2014 ที่ GNOME.asia นี่คือวัตถุประสงค์หลักของ systemd พื้นที่ที่ครอบคลุมแล้วและที่ยังดำเนินอยู่:

วัตถุประสงค์ของ systemd:

วัตถุประสงค์ของเรา

  • เปลี่ยน Linux จากถุงบิตให้เป็นระบบปฏิบัติการเอนกประสงค์
  • การสร้างระบบปฏิบัติการรุ่นต่อไปของอินเทอร์เน็ตการรวมความแตกต่างอย่างไม่มีจุดหมายระหว่างการกระจาย
  • นำนวัตกรรมกลับสู่ระบบปฏิบัติการหลัก

  • เดสก์ท็อป, เซิร์ฟเวอร์, คอนเทนเนอร์, เอ็มเบ็ดเด็ด, มือถือ, คลาวด์, คลัสเตอร์, . . พื้นที่เหล่านี้อยู่ใกล้กันมากกว่าที่คุณคิด

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

พื้นที่ครอบคลุมแล้ว:

สิ่งที่เราครอบคลุมอยู่แล้ว:

ระบบ init, การบันทึกเจอร์นัล, การจัดการล็อกอิน, การจัดการอุปกรณ์, การจัดการไฟล์ชั่วคราวและการระเหย, การลงทะเบียนรูปแบบไบนารี, บันทึก / เรียกคืนแบ็คไลท์, rfkill save / restore, bootchart, readahead, การตั้งค่าการจัดเก็บข้อมูลเข้ารหัส การลงทะเบียนการจัดการคอนเทนเนอร์ขั้นต่ำการจัดการชื่อโฮสต์การจัดการโลแคลการจัดการเวลาการจัดการเมล็ดแบบสุ่มการจัดการตัวแปร sysctl การจัดการคอนโซล . .

กำลังดำเนินการ:

เรากำลังทำอะไรอยู่:

  • การจัดการเครือข่าย
  • systemd-networkd
  • Local DNS cache, mDNS Responder, LLMNR Responder, การตรวจสอบ DNSSEC
  • IPC ในเคอร์เนล
  • kdbus, sd-bus
  • การประสานเวลากับ NTP
  • systemd-timesyncd
  • บูรณาการกับตู้คอนเทนเนอร์มากขึ้น
  • Sandboxing of Services
  • แอป Sandbox
  • รูปแบบภาพ OS
  • รูปแบบภาพคอนเทนเนอร์
  • รูปแบบภาพแอป
  • GPT พร้อมการค้นพบอัตโนมัติ
  • ระบบไร้สัญชาติ, ระบบทันใจ, รีเซ็ตเป็นค่าจากโรงงาน
  • / usr เป็นระบบปฏิบัติการ
  • / etc คือการกำหนดค่า (เป็นทางเลือก)
  • / var คือสถานะ (เป็นทางเลือก)
  • การเริ่มต้นและการปรับปรุงโหนดปรมาณู
  • บูรณาการกับระบบคลาวด์
  • การจัดการบริการข้ามโหนด
  • ภาพ OS ที่ตรวจสอบได้
  • ไปจนถึงเฟิร์มแวร์
  • กำลังโหลด Boot

ขอบเขตของคำตอบนี้

ดังที่fpmurphy1ตั้งข้อสังเกตในความเห็นว่า "มันควรจะชี้ให้เห็นว่า systemd ได้ขยายขอบเขตการทำงานในช่วงหลายปีที่ผ่านมามากกว่าแค่การเริ่มต้นระบบ"

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

ข้อมูลเพิ่มเติม

ข้อมูลเพิ่มเติมสามารถดูได้ที่:

พิเศษ

LinOxideทีมได้สร้างSystemd VS SysV Init ลินุกซ์ Cheatsheet


4
... และมีการแยกเดเบียนเกิดขึ้น Devuan GNU + Linux เป็นทางเลือกของ Debian ที่ไม่มี systemd
fpmurphy

2
มันควรจะชี้ให้เห็นว่า systemd ได้ขยายขอบเขตของงานมากกว่าปีที่เริ่มต้นเพียงแค่ระบบ
fpmurphy

1
โพสต์ที่โดดเด่นและมีประโยชน์อย่างยิ่งกับ Cent Guy ขอบคุณที่สละเวลาครับ !!!
origin1tech

4
@ronsmith service <foo> start/stop/restart/statusยังทำงานได้ดี เช่นเดียวกับซอฟต์แวร์ unix ส่วนใหญ่ systemd ให้ความเข้ากันได้ของคำสั่งกับค่าเริ่มต้นที่รู้จักกันดี
Shadur

2
คำตอบที่ดีมาก ประเด็นหนึ่งที่: ระบบปฏิบัติการ BSD ไม่ใช่การกระจาย Linux: มันเป็นระบบปฏิบัติการ Unix ที่แตกต่างกันกับเคอร์เนลของตัวเอง
Giorgio

68

ทั้งพุ่งพรวดและ systemd เป็นความพยายามที่จะแก้ปัญหาบางอย่างกับข้อ จำกัด ของระบบ init SysV ดั้งเดิม ตัวอย่างเช่นบริการบางอย่างต้องเริ่มต้นหลังจากบริการอื่น ๆ (ตัวอย่างเช่นคุณไม่สามารถเมานต์ระบบไฟล์ NFS จนกว่าเครือข่ายจะทำงาน) แต่วิธีเดียวใน SysV ที่จะจัดการนั่นคือการตั้งค่าลิงก์ในไดเรกทอรี rc # .d เช่นนี้อยู่ก่อนอื่น เพิ่มไปที่คุณอาจต้องหมายเลขใหม่ทุกอย่างในภายหลังเมื่อมีการเพิ่มหรือเปลี่ยนแปลงการอ้างอิง พุ่งพรวดและ Systemd มีการตั้งค่าอัจฉริยะมากขึ้นสำหรับการกำหนดความต้องการ นอกจากนี้ยังมีปัญหากับความจริงที่ว่าทุกอย่างเป็นเชลล์สคริปต์บางประเภทและไม่ใช่ทุกคนที่เขียนสคริปต์เริ่มต้นที่ดีที่สุด ที่ส่งผลต่อความเร็วของการเริ่มต้น

ข้อดีของ systemd ที่ฉันเห็น:

  • ทุกกระบวนการเริ่มได้รับ cgroup ของตัวเองหรือ cgroup ที่เฉพาะเจาะจง
  • การสร้างซ็อกเก็ตและตัวจัดการไฟล์ไว้ล่วงหน้าสำหรับบริการคล้ายกับที่ xinetd ทำเพื่อบริการ ตัวอย่างเช่น systemd จะระงับการเปิด filehandle สำหรับ / dev / log สำหรับ syslog และบริการที่ตามมาที่ส่งไปยัง / dev / log จะมีข้อความบัฟเฟอร์จนกว่า syslogd จะพร้อมใช้งาน
  • กระบวนการที่น้อยลงจะเรียกใช้เพื่อเริ่มบริการจริง หมายความว่าคุณไม่ได้เขียนเชลล์สคริปต์เพื่อเริ่มบริการของคุณ นี่อาจเป็นการปรับปรุงความเร็วและ (IMO) เป็นสิ่งที่ง่ายต่อการติดตั้งตั้งแต่แรก

ข้อเสียอย่างหนึ่งที่ฉันรู้คือการใช้ประโยชน์จากการจัดสรรล่วงหน้าของซ็อกเก็ต / FH systemd daemons จำนวนมากจะต้องได้รับการแก้ไขเพื่อให้ FH ส่งผ่านไปยังพวกเขาโดย systemd


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

4
ทำให้หนึ่งเกือบจะสนสำหรับ fiords มากมายของ Plan9 ... ทุกอย่างเป็นไฟล์
dhchdhd

4
ความจริงแล้ว Pulseaudio เป็นวิธีแก้ปัญหาที่ไม่มีอยู่จริง ไม่มีสิ่งใดที่ PA สามารถทำได้เพื่อให้ ALSA ทำไม่ได้และฉันได้ยินผู้คนจำนวนมากที่มีปัญหากับ PA ซ้ำแล้วซ้ำอีก
WhyNotHugo

3
ข้อเสียของ systemd สองข้อที่คุณพลาด: (1) สคริปต์เริ่มทำงานทั้งหมดจำเป็นต้องเขียนใหม่ (2) มีความเข้ากันได้น้อยกับ OS ที่ไม่ใช่ linux (เช่น BSD เป็นต้น)
WhyNotHugo

8
ดีเพียง. โปรดดูที่0pointer.de/blog/projects/the-biggest-myths ฉันเห็นการเติบโตของ systemd และสามารถยืนยันได้ว่าการวิพากษ์วิจารณ์ส่วนใหญ่ที่ได้รับจากที่นี่นั้นไร้เหตุผลอย่างสมบูรณ์ ที่ลิงค์ที่คุณจะพบระเบิดโดยเป่าเป็นเหตุผลโต้แย้ง
vonbrand

30

Saw systemdกล่าวถึงArch General MLวันนี้ ดังนั้นอ่านมัน เอชออนไลน์เช่นเคยเป็นแหล่งที่ดีสำหรับเทคโนโลยี Linux และเป็นที่ที่ผมพบว่าสถานที่ของฉันที่จะเริ่มต้นการวิจัยSystemd เป็น SysV Init และทางเลือกที่พุ่งพรวด อย่างไรก็ตามบทความ H Online (ในกรณีนี้) ไม่ใช่การอ่านที่มีประโยชน์มากการใช้งานจริงของมันคือมันให้ลิงก์ไปยังการอ่านที่มีประโยชน์

คำตอบที่แท้จริงอยู่ในประกาศของ systemd ซึ่งให้บางจุดที่สำคัญของสิ่งที่ผิดกับ SysV initd และสิ่งที่ระบบใหม่ต้องทำ

  • เพื่อเริ่มน้อยลง
  • และเพื่อเริ่มต้นมากขึ้นในแบบคู่ขนาน

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

อีกส่วนหนึ่งของแผนดูเหมือนว่าจะไม่ต่อเนื่องเป็นระบบไฟล์ แต่แทนที่จะเมานต์ตามความต้องการเช่นกันวิธีที่คุณไม่ต้องรอ/home/ฯลฯ (เพื่อไม่ให้สับสนกับ/etc) เพื่อเมานต์และ / หรือfsckเมื่อคุณสามารถ เริ่ม daemons ในฐานะ/และ/var/อื่น ๆ ถูกเมาท์แล้ว มันบอกว่ามันจะใช้ autofs ด้วยเหตุนี้

นอกจากนี้ยังมีเป้าหมายในการสร้างตัวบอก.desktopลักษณะเริ่มต้นแทนสคริปต์ สิ่งนี้จะป้องกันการshประมวลผลช้าจำนวนมากและแม้แต่การแยกกระบวนการจากสิ่งที่ชอบsedและgrepที่มักใช้ในเชลล์สคริปต์

พวกเขาวางแผนที่จะไม่เริ่มบริการบางอย่างจนกว่าพวกเขาจะถูกถามและอาจปิดพวกเขาหากพวกเขาไม่ต้องการอีกต่อไปโมดูลบลูทู ธ และ daemon จะต้องการเฉพาะเมื่อคุณใช้อุปกรณ์บลูทู ธ อีกตัวอย่างหนึ่งที่ได้รับคือ ssh daemon นี่คือสิ่งที่ inetd สามารถทำได้ โดยส่วนตัวฉันไม่แน่ใจว่าฉันชอบสิ่งนี้เพราะมันอาจหมายถึงเวลาแฝงเมื่อฉันต้องการมันและในกรณีของ ssh ฉันคิดว่ามันหมายถึงช่องโหว่ด้านความปลอดภัยที่เป็นไปได้ถ้า inetd ของฉันถูกบุกรุกทั้งระบบจะเป็นเช่นนั้น อย่างไรก็ตามฉันได้รับแจ้งว่าการใช้สิ่งนี้เพื่อฝ่าฝืนระบบนี้เป็นไปไม่ได้และถ้าฉันต้องการฉันสามารถปิดการใช้งานคุณสมบัตินี้ต่อบริการและวิธีอื่น ๆ

เห็นได้ชัดว่าคุณสมบัติอื่นคือความสามารถในการเริ่มต้นขึ้นอยู่กับเหตุการณ์เวลาไม่ว่าจะเป็นในช่วงเวลาที่กำหนดเป็นประจำหรือในเวลาที่แน่นอน นี้จะคล้ายกับสิ่งที่crondและatdทำตอนนี้ แม้ว่าฉันจะบอกว่ามันจะไม่สนับสนุนผู้ใช้ "cron" โดยส่วนตัวสิ่งนี้ฟังดูเหมือนไม่มีจุดหมายมากที่สุด ฉันคิดว่าสิ่งนี้ถูกเขียนขึ้น / คิดขึ้นโดยคนที่ไม่ได้ทำงานในสภาพแวดล้อมที่มีผู้ใช้หลายคนมันไม่มีจุดประสงค์มากสำหรับผู้ใช้ cron ถ้าคุณเป็นผู้ใช้เพียงคนเดียวในระบบ ฉันทำงานกับระบบที่มีผู้ใช้หลายคนทุกวันและกฎนั้นมักเรียกใช้สคริปต์ผู้ใช้ในฐานะผู้ใช้ แต่บางทีฉันอาจจะไม่ได้มองการณ์ไกลและมันก็ไม่ได้ทำให้มันไม่สามารถวิ่งได้crondหรือatdมันจะไม่ทำร้ายใครนอกจากนักพัฒนาที่ฉันคิด

ข้อเสียที่สำคัญของ systemd คือ daemons บางตัวจะต้องได้รับการแก้ไขเพื่อใช้ประโยชน์ให้เต็มที่ พวกเขาจะทำงานได้ในขณะนี้ แต่พวกเขาจะทำงานได้ดีขึ้นหากพวกเขาเขียนเฉพาะสำหรับซ็อกเก็ตรุ่น

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

หรือเพื่อให้ง่ายขึ้น: ความจริงที่ว่าผู้ใช้เพิ่งเริ่ม D-Bus นั้นไม่มีทางบ่งชี้ว่า NetworkManager ควรจะเริ่มต้นด้วย (แต่นี่คือสิ่งที่พุ่งพรวดจะทำ) มันถูกต้องแล้ว: เมื่อผู้ใช้ถาม NetworkManager นั่นเป็นข้อบ่งชี้ว่า D-Bus ควรเริ่มต้นด้วย (ซึ่งเป็นสิ่งที่ผู้ใช้ส่วนใหญ่คาดหวังใช่ไหม)
ระบบเริ่มต้นที่ดีควรเริ่มต้นเฉพาะสิ่งที่จำเป็นและตามความต้องการ ทั้งขี้เกียจหรือขนานและล่วงหน้า อย่างไรก็ตามไม่ควรเริ่มต้นเกินความจำเป็นโดยเฉพาะอย่างยิ่งไม่ใช่ทุกอย่างที่ติดตั้งซึ่งสามารถใช้บริการได้

ขณะที่ผมได้กล่าวมาแล้วนี้จะกล่าวถึงมากขึ้นครอบคลุมในประกาศของ systemd


ขออภัยการประกาศเป็นเหมือนหนังสือ ฉันต้องอ่านและหาความจริงก่อนที่ฉันจะสามารถเพิ่มเติมได้ที่นี่
xenoterracide

2
สิ่งนี้ดีกว่าคำตอบของ @ John อย่างไร มันเป็นตัวยึดตำแหน่งหรือไม่? โปรโมชั่นของH Online ?
tshepang

1
@tshepang จริง ๆ แล้วมันเชื่อมโยงกับการประกาศระบบ d และเนื้อหาออนไลน์ h มีลิงก์ไปยังลิงก์นั้นและลิงก์ที่น่าสนใจอื่น ๆ มันเป็นการอ่านที่น่าเบื่อมานาน ฉันอาจเพิ่มมากขึ้นเมื่อฉันครุ่นคิด ... นี่ไม่ใช่เรื่องง่าย เมื่อฉันเขียนสิ่งนี้ฉันคิดว่าคุณอาจต้องการเริ่มอ่านเร็วกว่าในภายหลัง แต่รู้สึกฟรีเพื่อ mod ฉันลง แน่นอน @jsbillings คำตอบที่ดีและดีกว่าของฉันจนถึง แต่ไม่ดีเท่าการอ่านประกาศ
xenoterracide

@tshepang ฉันอาจจะเพิ่มอีกในวันพรุ่งนี้หลังนอน สิ่งออนไลน์เป็นเพียงฉันเป็นนักข่าวที่ดีและอ้างอิงแหล่งที่มาของฉัน
xenoterracide

@tshepang ฉันอัพเดตคำตอบแล้ว ค่อนข้างแน่ใจว่าฉันได้ทำไปแล้วหากผู้คนที่เป็นประโยชน์ใน irc: //frenode.net/systemd ตัดสินใจว่าพวกเขาต้องการแก้ไขข้อเสนอบางอย่าง
xenoterracide

11

สิ่งหนึ่งที่ดีที่สุดของคุณลืมเป็นองค์กรของกระบวนการในcgroups

ดังนั้นถ้า systemd เริ่มต้นสิ่งใดสิ่งหนึ่งมันจะใส่สิ่งนี้ลงใน cgroup ของตัวเองและไม่มีความหมาย (ไม่มีการกีดกัน) สำหรับกระบวนการที่จะหลบหนี cgroup นั้น นี่คือผลที่ตามมาของ:

  • ผู้ดูแลระบบใหญ่ที่มีผู้ใช้จำนวนมากมีวิธีใหม่ที่มีประสิทธิภาพในการระบุผู้ใช้ / กระบวนการที่เป็นอันตราย
  • จัดลำดับความสำคัญสำหรับ CPU-การตั้งเวลาสามารถกำหนดได้ดีขึ้นเช่นทำโดย"แพทช์ autocgroup สงสัย"

8

สำหรับการดู systemd อย่างละเอียดเริ่มต้นด้วยร่างการออกแบบแรก (และคำวิจารณ์โดยละเอียดของระบบ init ที่มีอยู่รวมถึงการพุ่งพรวดและวิธีที่ systemd เสนอให้แก้ไข) ให้ไปที่หน้าแรก เมื่อเวลาผ่านไปมีหลายบทความในการเริ่มต้นการตีพิมพ์ในLWN เพิ่งทราบว่าการเอ่ยถึง systemd (หรือ pulseaudio) จะทำให้เกิดความไม่แน่นอน

IMVHO (และในฐานะผู้ใช้ Fedora) ฉันมีความสุขมาก บางสิ่งในสายนี้ค้างนานเกินกว่าจะจัดการกับความซับซ้อนของระบบลีนุกซ์ปัจจุบันได้ Fedora เริ่มต้นขึ้นมาระยะหนึ่งแล้ว แต่มันก็ไม่เคยออกนอกเวทีที่จะมาแทนที่ระบบ sysvinit ได้โดยรันสคริปต์ init ที่ไม่เปลี่ยนแปลง สัญญาของการลดความซับซ้อนของการกำหนดค่าการบูตนั้นมาพร้อมกับค่าใช้จ่ายอีกครั้งตั้งค่าการพึ่งพาซึ่งกันและกันได้ด้วยตนเองและนั่นก็ไม่ทำงาน systemd ตัวเลขอ้างอิงออกมาด้วยตัวเอง (หรือเพียงแค่อนุญาตให้เริ่มต้นสิ่งต่าง ๆ โดยไม่คำนึงถึงการพึ่งพาพวกเขาเรียงลำดับตัวเองออก) ข้อได้เปรียบที่ยิ่งใหญ่อีกประการ (บางคนบอกว่ามันเป็นข้อเสียอย่างรุนแรง) คือมันใช้ประโยชน์จากคุณสมบัติเฉพาะของลินุกซ์เพื่อด้ามจับ (สะดุดตา cgroups อนุญาตให้แยก daemon และลูกหลานทั้งหมดได้ดังนั้นจึงง่ายต่อการตรวจสอบ จำกัด ทรัพยากรหรือฆ่าพวกมัน กลุ่มมีอีกหลายคน)


3

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


ไม่ถูกต้อง. สิ่งเหล่านั้นไม่ใช่สำเนาและมันมีขีด จำกัด ที่สามารถกำหนดค่าได้freedesktop.org/software/systemd/man/journald.conf.html
pal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.