लिनक्स कैसे जानता है कि उसका स्वैप विभाजन कहाँ है?


13

मैंने पढ़ा है कि आपको SSD के बजाय HDD पर स्वैप विभाजन लगाने की आवश्यकता है।

मेरे प्रश्न निम्नलिखित हैं:

  • वितरण (या कुछ और) द्वारा "स्वैप" कब और कैसे किया जाता है ताकि इसके स्वैप विभाजन का पता लगाया जा सके?
  • क्या यह बूट के दौरान होता है?
  • यह सिर्फ सभी उपलब्ध डिस्क की जाँच करता है और 'स्वैप' ध्वज के साथ एक विभाजन के लिए खोज करता है?
  • यदि कई विभाजन ऐसे हों तो क्या होगा?
  • इसके अलावा, अगर मैं चलाऊं तो मुझे कितने स्वैप विभाजन की आवश्यकता होगी, उदाहरण के लिए, एक ही डिस्क पर दो अलग-अलग वितरण, चलो फेडोरा और उबंटू कहते हैं?

17
ध्यान दें कि SSD पर एक स्वैप वास्तव में एक महान स्वैप होगा (macOS उम्र के लिए ऐसा कर रहा है)। हालाँकि यह SSD को अतिरिक्त पढ़ने / लिखने के लिए जा रहा है जो इसके जीवनकाल को कम कर सकता है।
नॉनवेज

20
आपने कहां पढ़ा कि स्वैप एक HDD पर होना चाहिए न कि SSD में? इसके अलावा, लेख या टिप्पणी कितनी पुरानी थी? आधुनिक एसएसडी पहनने के स्तर पर बहुत बेहतर हैं और एसएसडी के नए होने पर जिस तरह से किया गया था, उसे बार-बार लिखने के बाद असफल नहीं होते। इसके अलावा, अगर आपके पास एक कंप्यूटर है जिसमें केवल SSDs हैं, तो आपके पास वास्तव में ज्यादा विकल्प नहीं हैं, इसके अलावा स्वैप का उपयोग न करें
JDS

2
@ ज़ाकिंस्टर: जब आपकी 1TB ड्राइव हमेशा भरी रहती है तो क्या होगा? भंडारण प्रावधानों के साथ भंडारण की जरूरतें बढ़ गई हैं।
ऑर्बिट में

3
दूसरे शब्दों में, "हां मैं सहमत हूं, मेरे पिछले बयान के विपरीत डिस्क का वास्तविक आकार अप्रासंगिक है - यह है कि आप इसका कितना उपयोग कर रहे हैं"
लाइटवेट रेस इन ऑर्बिट

6
@DavidSchwartz और, यदि आप "महत्वपूर्ण मात्रा में स्वैप का उपयोग कर रहे हैं", जबकि एक SSD एक HDD की तुलना में काफी कम कथित सिस्टम प्रदर्शन हानि का उत्पादन करेगा, तो बेहतर विकल्प अभी भी सिस्टम में अधिक RAM जोड़ देगा, या वर्चुअल को कम कर देगा। आपके स्वैप का मेमोरी फ़ुटप्रिंट किसी तरह से महत्वपूर्ण स्वैप उपयोग को रोकने के लिए। यह भी ध्यान दें कि एक लंबे समय से चल रहे सिस्टम के बीच एक अंतर है जो लगभग कभी इस्तेमाल किए गए डेटा के साथ स्वैप नहीं करता है। एक सिस्टम जो सक्रिय रूप से स्वैप और स्कैनिंग कर रहा है ...
twalberg

जवाबों:


24

वैधानिक रूप से कॉन्फ़िगर किया गया स्वैप स्थान (प्रकार जो कि हर वितरण उपयोग करता है) /etc/fstabउसी तरह से कॉन्फ़िगर किया गया है जैसे फाइल सिस्टम हैं।

एक विशिष्ट प्रविष्टि कुछ इस तरह दिखती है:

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

आप फ़्लैग फ़ील्ड (चौथा फ़ील्ड) में discardया तो nofailनिर्दिष्ट या देख सकते हैं । एक स्वैप क्षेत्र के लिए हर तरह के लाइन मेल खाती है (यह नहीं है है एक विभाजन होने के लिए आपको स्वैप फ़ाइलें, या यहाँ तक कि पूरे स्वैप डिस्क हो सकते हैं)।

वास्तव में कुछ विशिष्ट मामलों में आप इसके बजाय गतिशील रूप से स्वैप स्पेस को कॉन्फ़िगर कर सकते हैं, हालांकि यह दुर्लभ है क्योंकि यह मेमोरी प्रबंधन से संबंधित समस्याग्रस्त व्यवहार का कारण बन सकता है। इस स्थिति में, कॉन्फ़िगरेशन पूरी तरह से एक यूजरस्पेस घटक द्वारा नियंत्रित किया जाता है जो रन समय पर आवश्यकतानुसार स्वैप फ़ाइलों को बनाता और सक्षम करता है।

जहाँ तक आपको कितने की आवश्यकता है, यह एक जटिल सवाल का जवाब है, लेकिन आपके द्वारा चलाने की योजना बनाने वाले विभिन्न लिनक्स वितरणों की संख्या पर इस पर शून्य प्रभाव पड़ता है, जब तक कि आप हाइबरनेशन में एक और वितरण करने में सक्षम नहीं होना चाहते (और आप शायद ऐसा करना नहीं चाहते हैं, क्योंकि यह आपके सिस्टम को खराब करने का एक बहुत आसान तरीका है)।

जब आप लगभग किसी भी बड़े वितरण (Fedora, OpenSUSE, Linux Mint, Debian और Ubuntu सहित) के लिए इंस्टॉलर को चलाने के लिए जाते हैं, तो यह सिस्टम पर किसी भी मौजूदा स्वैप विभाजन का पता लगाएगा, और वितरण के लिए कॉन्फ़िगरेशन में उन्हें जोड़ देगा। स्थापित करना (संभवतः यदि आप मैन्युअल विभाजन का चयन करते हैं) को छोड़कर, और ज्यादातर मामलों में यह सिस्टम समझदार तरीके से कॉन्फ़िगर किया जाएगा।

इससे भी अलग, मैं व्यक्तिगत रूप से कई स्वैप विभाजन होने से बचने का सुझाव दूंगा जब तक कि आप बहुत सारे डिस्क के साथ एक सर्वर सिस्टम के बारे में बात नहीं कर रहे हैं, और तब भी आपको वास्तव में यह जानने की आवश्यकता है कि आप क्या करने जा रहे हैं ताकि यह अच्छा प्रदर्शन करे ।


यदि आपके पास 2 लिनक्स डिस्ट्रो है, तो आपके पास सिस्टम के लिए एक स्वैप विभाजन हो सकता है ... इसलिए आप हाइबरनेट और फिर से शुरू करने का प्रयास कर सकते हैं ... (विभिन्न उपयोगकर्ताओं बीटीडब्ल्यू का उपयोग करने के लिए बेहतर है और आपको अलग-अलग /tmpविभाजन / निर्देशिका की भी आवश्यकता होनी चाहिए )। शायद इस मामले में आभासी मशीनों का होना बेहतर है ...
हास्तूर

यदि एक ही SSD पर लिनक्स OS स्थापित है, तो उन्हें एक विभाजन के लिए एक समर्पित विभाजन के लिए क्या करने का सुझाव दिया गया है, हालांकि, वास्तव में यह स्वैप या इसके उपयोग में होने के लिए प्रतीत नहीं होता है। अगर मैं दौड़ता systemctl --all | grep swapहूं तो मुझे दो परिणाम मिलते हैं। dev-disk-by\x2duuid-1c692cc4\x2df942\x2d4478\x2dad0f\x2d266b7484273a.swapऔर swap.targetजो दोनों सक्रिय = निष्क्रिय और SUB = मृत हैं । स्वैप क्षेत्र का उपयोग करने के लिए मुझे अपना सिस्टम कैसे मिलेगा?
रॉकिन 4लाइफ 33

21

आइए कहते हैं फेडोरा और उबंटू?

… ये दोनों आजकल के ऑपरेटिंग सिस्टम हैं।

Systemd ऑपरेटिंग सिस्टम में क्या होता है

देशी तंत्र

सिस्टमड विभिन्न प्रकार की इकाइयों को नियुक्त करता है। .mountइकाई फाइलें इसे वॉल्यूम माउंट करने का निर्देश देती हैं। .swapयूनिट फाइलें इसे स्वैप विभाजन के बारे में कर्नेल को बताने का निर्देश देती हैं। ( .serviceइकाई फाइलें यह निर्देश देती हैं कि सेवाओं को कैसे चलाया जाए। और इसी तरह।) ये देशी सिस्टम तंत्र हैं। उन्हें अधिनियमित करने के लिए, सिस्टमड स्वयं ही उन बाल प्रक्रियाओं को बंद कर देता है जो संबंधित सिस्टम कॉल करते हैं।

यदि आप इस तरह के सिस्टमड ऑपरेटिंग सिस्टम पर systemctlकमांड (साथ --all) का उपयोग करते हैं , तो यह आपको लोड की .swapगई इकाइयों के बारे में बताएगा । उदाहरण के लिए:

dev-disk-by \ x2dpartuuid-40549710 \ x2d05.swap सक्रिय सक्रिय / dev / डिस्क / by-partuuid / 40549710-05 लोड किया गया
dev-disk-by \ x2duuid-1bb589e8 \ x2d929f \ x2d4041 \ x2d81f4 \ x2dff2b339b4e2a.swap सक्रिय सक्रिय / देव / डिस्क / बाय-यूड / 1bb589e8-929f-4041 -4041 -4041 -4041 -4041
dev-sda5.swap लोड सक्रिय / देव / sda5

यह आपको .mountइकाइयों के बारे में भी बताएगा ।

एक सिस्टम प्रशासक वास्तव में इस तरह लिख सकते हैं .swap, हाथ से इकाई फ़ाइलों बस के रूप में XE लिख सकते हैं .service, .socketहाथ से दूसरी इकाई फ़ाइलें, और। systemd ही फाइल सिस्टम में केवल यूनिट फाइलों की तलाश करता है। वे इसके मूल तंत्र हैं।

यहां तक ​​कि आपको ये दिखाने के लिए सिस्टमड मिल सकता है कि इन यूनिट फाइलों में क्या है और फाइलसिस्टम में वे कहां मिल सकते हैं:

$ systemctl cat dev-disk-by \\ x2duuid-1bb589e8 \\ x2d929f \\ x2d4041 \\ x2d81f4 \\ x2dff2a9a9b4e2a.swap 
#run/systemd/generator/dev-disk-by\x2duuid-1bb589e8\x2d929f\x2d4041-26x2d81f4\x2d223333bb9e2a.swap
# सिस्टमड-एफस्टैब-जनरेटर द्वारा स्वचालित रूप से उत्पन्न

[यूनिट]
Sourcepath = / etc / fstab
प्रलेखन = आदमी: fstab (5) आदमी: systemd-fstab-जनरेटर (8)

[स्वैप]
क्या = / 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 प्रकार को पहचानने का वैकल्पिक शुल्क लिया है, VFS प्रकार की तलाश में swapsystemd-fstab-generatorयहाँ कोई अपवाद नहीं है, और यह है कि यह कैसे /etc/fstabदेशी तंत्र में परिवर्तित करते समय व्याख्या करता है।

उत्तरार्द्ध जनरेटर EFI विभाजन तालिका को संसाधित करता है जो उसी डिस्क पर है जो EFI सिस्टम विभाजन को रखती है, EFI विभाजन तालिका प्रविष्टियों की तलाश में है जिसमें विभिन्न प्रसिद्ध विभाजन प्रकार GUID हैं। उन GUID में से एक पारंपरिक GUID है जो Linux स्वैप विभाजन को सौंपा गया है; और अगर systemd-gpt-auto-generatorउस GUID के साथ एक विभाजन मिलता है (जो कि सिस्टम डोको में दिए गए मानदंड को संतुष्ट करता है) यह इसके लिए एक .swapइकाई बना देगा ; बिलकुल नहीं/etc/fstab

बेशक, इस प्रक्रिया के बहुत सारे दुष्प्रभाव हैं। उदाहरण के लिए, क्योंकि /etc/fstabमेज पर कोई प्राथमिक कुंजी नहीं है, रिकॉर्ड में "कल्पना" और "फ़ाइल" (यानी "क्या" और "जहां") फ़ील्ड डुप्लिकेट हो सकते हैं। हालांकि, "फाइल" (यानी "जहां") क्षेत्र .mountइकाइयों के लिए एक अद्वितीय कुंजी है , सिस्टम सिस्टेम के मूल नाम में एम्बेडेड है। कोई भी दो .mountइकाइयाँ इसे साझा नहीं कर सकती हैं। के लिए .swapइकाइयों "कल्पना" (यानी "क्या") क्षेत्र इकाइयों के लिए अद्वितीय कुंजी है। कोई भी दो .swapइकाइयाँ साझा नहीं कर सकती हैं। तो सभी रिकॉर्ड /etc/fstabमूल रूप से देशी तंत्र के लिए परिवर्तनीय नहीं हैं और काम करेंगे, खासकर अगर लोग दो अलग-अलग उद्देश्यों के लिए एक ही माउंट बिंदु की सूची जैसी चीजें करते हैं या एक ही स्वैप विभाजन को दो अलग-अलग तरीकों से सूचीबद्ध करते हैं।

इसी तरह, क्योंकि यह /etc/fstabमूल तंत्र में अनुवादित है और systemd के मूल तंत्र में इकाइयों को सक्रिय करने के अन्य तरीके हैं , व्यवहार सूक्ष्म रूप से गैर-प्रणालीगत ऑपरेटिंग सिस्टम से भिन्न है। एक .mountइकाई, डिफ़ॉल्ट रूप से, माउंट किए गए स्टोरेज डिवाइस की उपस्थिति के जवाब में, बूटस्ट्रैप के बाद भी स्वचालित रूप से सक्रियsystemd-udevd हो जाएगी । या यह एक के रूप में सूचीबद्ध किया जा सकता है Wants=या Requires=कुछ की .serviceया .socketइकाई है, जिसका अर्थ है कि यह (फिर से) हो जाएगा सक्रिय जब वे कर रहे हैं। सम है RequiresMountsFor=

इंस्टॉलर प्रोग्राम और सिस्टमड तरीका

परंपरागत रूप से, ऑपरेटिंग सिस्टम इंस्टॉलर प्रोग्राम, और सिस्टम एडमिनिस्ट्रेटर बाद में सिस्टम को फिर से कॉन्फ़िगर करने के लिए, swप्रविष्टियों को लिखा है /etc/fstab। और इस तरह देशी .mountऔर .swapइकाइयाँ स्वतः उत्पन्न होती हैं। स्थापित / कॉन्फ़िगरेशन उपयोगिता "जानता है" जहां स्वैप फ़ाइल रखी गई थी, क्योंकि इसके उपयोगकर्ता इंटरफ़ेस में सिस्टम प्रशासक ने किसी प्रकार का चुनाव किया, और /etc/fstabमैच के लिए लिखता है । कभी-कभी वह पसंद मुझे स्थापना के भाग के रूप में एक स्वैप विभाजन बनाने के लिए होती है। ; कभी-कभी यह बस स्वैप विभाजन का उपयोग करता है जो आपको डिस्क पर पहले से ही मिला है। (इंस्टॉलर्स विभाजन के प्रकारों को देखते हुए भी)।

लेकिन सिस्टमड लोगों के पास ऑपरेटिंग सिस्टम का यह विचार है कि ऑटो खुद को काफी हद तक खाली /etcपेड़, तथाकथित स्टेटलेस सिस्टम से कॉन्फ़िगर करता है , और यही है कि जनरेटर जैसे तंत्र जो ईएफआई विभाजन तालिका पढ़ते हैं, वे सभी के बारे में हैं। सिस्टमड लोगों की योजना में, कोई नहीं है /etc/fstab, और वास्तव में कोई भी स्थायी कॉन्फ़िगरेशन डेटा /etcबिल्कुल भी नहीं है, और यह सब सामान डिस्क पर विभाजन तालिका की सामग्री से , हर बूटस्ट्रैप और हर पर घटाया जाता है systemctl daemon-reload। वे आजकल ऑपरेटिंग सिस्टम इंस्टॉलर प्रोग्राम को बढ़ावा नहीं देते हैं, जैसे कि एक नहीं लिखते हैं/etc/fstab

पारंपरिक योजना में, निश्चित रूप से आपके पास वास्तव में प्रत्येक ऑपरेटिंग सिस्टम का अपना निजी स्वैप विभाजन हो सकता है, न कि उन्हें एक दूसरे के स्वैप विभाजन को छूना होगा। और वास्तव में यदि आप एक स्वैप विभाजन के माध्यम से डिस्क के लिए हाइबरनेट का उपयोग कर रहे हैं और उम्मीद कर रहे हैं कि हाइबरनेट होने के दौरान किसी अन्य ऑपरेटिंग सिस्टम को मल्टी-बूट करने में सक्षम हो ( जो एक बहुत बुरा विचार है क्योंकि फाइलसिस्टम भ्रष्टाचार का इस तरह से सामना करना बहुत आसान है ) ज़रूरी।

सिस्टमड स्कीम में, भले ही ऑपरेटिंग सिस्टम अभी तक नहीं है क्योंकि सिस्टमड लोग इसकी परिकल्पना करते हैं और "स्टेटलेस" होते हैं, उक्त जनरेटर चलते हैं; और इस प्रकार अपेक्षित विभाजन के साथ सभी स्वैप विभाजन (ESP / रूट डिस्क पर) स्वचालित रूप से सभी systemd ऑपरेटिंग सिस्टम द्वारा नियोजित होते हैं। चूंकि वे सभी स्वचालित रूप से खोज किए गए स्वैप विभाजन साझा कर रहे हैं, किसी को वास्तव में स्थापित ऑपरेटिंग सिस्टम प्रति एक स्वैप विभाजन बनाने की आवश्यकता नहीं है।

आगे की पढाई


बहुत अच्छा - स्पष्टीकरण के लिए धन्यवाद!
एंडी डाल्टन

मेरा एक हिस्सा है जो वास्तव में सिर्फ सिस्टमड के बारे में बात करने के लिए आपको वोट देना चाहता है। लेकिन निश्चित रूप से यह अनुचित है (और यह भी कि systemd या no का मतलब यह नहीं है कि आप गलत हैं) और मैं आम तौर पर वैसे भी वोट को कम नहीं करता हूं क्योंकि यह मुझे कभी नहीं लगा कि मैं रचनात्मक हो सकता हूं। हालांकि यह एक अच्छा लेखन है, इसलिए मैंने लेन्नर्ट के संदर्भों को देखने के बावजूद इस उत्तर को वोट दिया है। यदि और कुछ नहीं तो आप इसमें प्रयास करेंगे और इसकी प्रशंसा की जानी चाहिए। मैंने स्टेटलेस बकवास के बारे में संक्षेप में पढ़ा है और यह कुछ ऐसा है जो ... बल्कि मुझे यकीन भी नहीं है कि यह क्या करता है इसलिए मैं इसे उस पर छोड़ दूंगा।
19

13

ऐतिहासिक रूप से, स्वैप विभाजन /etc/fstabप्रकार की प्रविष्टि के साथ निर्दिष्ट किया गया है swap। बूट पर, स्टार्टअप प्रक्रिया उस फ़ाइल को पढ़ेगी और उस कॉन्फ़िगरेशन को कर्नेल में धकेल देगी।

में प्रविष्टि का एक उदाहरण /etc/fstabहै:

/dev/sdb    none    swap     sw      0  0

मैं इस बात से परिचित नहीं हूं कि systemdस्वैप कैसे प्रबंधित करता है, लेकिन मेरा मानना ​​है कि अंतिम परिणाम समान है: एक यूजरस्पेस प्रक्रिया से पता चलता है कि स्वैप के लिए कौन सा स्थान आवंटित किया गया है, और उपयोगकर्तास्पेस प्रक्रिया कर्नेल को सूचित करती है।


प्रश्नकर्ता ने लिनक्स के बारे में पूछा, और यह लिनक्स के लिए गलत नहीं है; लेकिन यह लिनक्स के लिए अजीब है। अन्य ऑपरेटिंग सिस्टम, जैसे कि उदाहरण के लिए FreeBSD, अपने VFS प्रकार के बजाय /etc/fstabअपने swमाउंट प्रकार से स्वैप रिकॉर्ड को पहचानते हैं swap
JdeBP

1
उत्तर प्रश्न के सभी भागों को संबोधित नहीं करता है।
सेर्गेई कोलोडियाज़नी

मुझे यह भी बताना चाहिए कि यह उत्तर, भी, ऑपरेटिंग सिस्टम की दुनिया में पुराना है। यह ध्यान में रखने में विफल रहता है systemd-gpt-auto-generator
JdeBP

2
आपका क्या मतलब है कि systemd fstab का उपयोग नहीं करता है? बिलकुल यह करता है!
psusi

1
@psusi: सिस्टमड समझता है, लेकिन fstab की आवश्यकता नहीं है।
एमएसल्टर्स

4

अन्य सभी उत्तरों में उल्लेख है कि बूट पर स्वैप फाइल सिस्टम को कैसे इंगित किया जाए।

हालांकि, अन्य उत्तरों में जोड़ने के लिए कई बिंदु:

  • स्वैप स्पेस एक फाइल भी हो सकती है;
  • एक स्वैप स्पेस पार्टीशन आमतौर पर 0x82 टाइप किया जाता है;
  • आप रन-टाइम में किसी भी बिंदु पर एक स्वैप स्पेस माउंट कर सकते हैं ;
  • किसी विभाजन / फ़ाइल को चिह्नित / आरंभ करने के लिए, इसे पहचाने जाने के लिए और बाद में स्वैप स्थान के रूप में उपयोग किया जाता है, आपको कमांड का उपयोग करने की आवश्यकता होती है mkswap;
  • एक स्वैप विभाजन / फ़ाइल को सक्रिय करने / उपयोग करने के लिए आप कमांड का उपयोग करते हैं swapon;
  • इसी तरह इसे बंद करने के लिए, आप साथ चलते हैं swapoff
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.