मैं CentOS 7 पर स्वैप स्पेस को सक्षम नहीं कर सकता


55

इसलिए मैं ओटीआरएस स्थापित करने के लिए एक ट्यूटोरियल का अनुसरण कर रहा हूं जो ओपन सोर्स टिकट रिक्वेस्ट सिस्टम है। तो स्थापित करने के लिए, इसके लिए आवश्यक है: 4GB स्वैप स्थान। यहाँ मैं इस्तेमाल किया कमान है:

[root@ip-10-0-7-41 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       50G   14G   37G  27% /
devtmpfs        478M     0  478M   0% /dev
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           496M   13M  484M   3% /run
tmpfs           496M     0  496M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/1000
[root@ip-10-0-7-41 ~]# fallocate -l 4G /myswap
[root@ip-10-0-7-41 ~]# ls -lh /myswap
-rw-r--r--. 1 root root 4.0G Jul  8 08:44 /myswap
[root@ip-10-0-7-41 ~]# chmod 600 /myswap
[root@ip-10-0-7-41 ~]# mkswap /myswap
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=3656082a-148d-4604-96fb-5b4604fa5b2e
[root@ip-10-0-7-41 ~]# swapon /myswap
swapon: /myswap: swapon failed: Invalid argument

आप देख सकते हैं: अमान्य तर्क त्रुटि यहाँ। मैंने इसे सक्षम करने के लिए कई बार व्यर्थ कोशिश की। कृपया मुझे बताएं कि इस त्रुटि को कैसे ठीक किया जाए। (मैं इस CentOS 7 को AWS इंस्टेंस EC2 पर चला रहा हूं)

[root@ip-10-0-7-41 ~]# df -T | awk '{print $1,$2,$NF}' | grep "^/dev"
/dev/xvda1 xfs /

यह किस फाइलसिस्टम पर हो रहा है? किसी भी तरह से btrfs?
सुहाबा

@ सचाबा हैलो, मैंने अपना प्रश्न संपादित किया। मुझे लगता है कि फाइलसिस्टम xfs है।
द वन

2
XFS पर वास्तव में इसका उपयोग करना बेहतर है dd। कृपया ध्यान रखें कि सभी फाइल सिस्टम स्वैप का समर्थन नहीं करते हैं या कम से कम उसी तरह से नहीं करते हैं।
सुहाबा

@schaiba मैं फाइलसिस्टम के प्रकार के बारे में बहुत अच्छी तरह से नहीं जानता था। बहुत बहुत धन्यवाद।
द वन

जवाबों:


102

इसके साथ समस्या fallocate(1)यह है कि यह ioctlsआवंटन को तेज और प्रभावी बनाने के लिए फाइलसिस्टम का उपयोग करता है , नुकसान यह है कि यह भौतिक रूप से स्थान आवंटित नहीं करता है लेकिन swapon(2)syscall को वास्तविक स्थान की आवश्यकता होती है। संदर्भ: https://bugzilla.redhat.com/show_bug.cgi?id=1129205

मैं इस मुद्दे का सामना अपने बॉक्स के साथ पहले भी कर चुका था। इसलिए उपयोग करने के बजाय fallocate, मैंने ddलिंक के रूप में उपयोग किया

sudo dd if=/dev/zero of=/myswap count=4096 bs=1MiB

और साथ आगे बढ़ने chmod, mkswapऔर swaponआदेशों। बिंगो! इसने काम कर दिया।


1
Odd, एक fallocate'd स्वैप फ़ाइल ने मेरे लिए Ubuntu 16.04.3 LTS पर ठीक काम किया, लेकिन यह Red Hat Enterprise Linux सर्वर रिलीज़ 7.4 (Maipo) पर "स्वैप विफल: अमान्य तर्क" के साथ विफल हो गया। ऊपर दिया गया dd कमांड वास्तव में RedHat पर काम करता है। दो ओएस के बीच कुछ अलग होना चाहिए जो उबंटू पर काम करने की अनुमति देता है।
डेविडियन १०२४

समाधान
सैंटोस

ddप्रतीत होता है कि बहुत अधिक काम करने time dd if=/dev/zero of=/myswap count=4096 bs=1MiBमें 14.003 सेकंड time fallocate -l 4G /swap3लगते हैं जहां 0.018 सेकंड लगते हैं, लेकिन वे एक ही आकार की फ़ाइल का उत्पादन करते हैं। मुझे लगता fallocateहै कि शून्य में प्रतिलिपि नहीं करता है जिस तरह से ddकरता है और swaponउन शून्य की जरूरत है।
डैनियल वाइजहार्ट

swapon: /swapfile: read swap header failed: Invalid argumentswapon /swapfileसेंटो 7 कठपुतली के सर्वर पर प्रयास करने के बाद यह त्रुटि मिली
ब्रायन थॉमस

@BrianThomas ऐसा लगता है जैसे आप dd के साथ इसे बनाने के बाद फाइल पर mkswap चलाना भूल गए।
जब्लिन

17

इन चरणों का पालन करें, यह DigitalOcean की बूंदों पर काम करता है। मैंने परीक्षण किया। अपनी जरूरत के हिसाब से राशि 4096 बदलें

yum install nano -y

sudo dd if=/dev/zero of=/swapfile count=4096 bs=1MiB
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

sudo nano /etc/fstab

इस पंक्ति को जोड़ें:

/swapfile   swap    swap    sw  0   0

यह आदेश चलाएँ

sudo sysctl vm.swappiness=10

sudo nano /etc/sysctl.conf

इस लाइन को जोड़ें

vm.swappiness = 10
vm.vfs_cache_pressure = 50

स्वैप का आकार सत्यापित करने के लिए

swapon --summary
free -h

2
मेरी ddआज्ञा होगी dd if=/dev/zero of=/swapfile count=4 bs=1GiBक्योंकि मुझे गिबाइट्स में मेबीबाइट्स की गणना करने से परेशान नहीं किया जा सकता है अगर ddवह मेरे लिए ऐसा कर सकता है। क्या आप जानते हैं कि योर के दिनों में लोगों ने इसे किबिबाइट्स में व्यक्त किया और गिबिबाइट्स के लिए हाथ से गणना की? अतुल्य!
एमी वैन गैससे

@AmedeeVanGasse आप dd कमांड के संस्करण को वास्तव में 1GiB मेमोरी की आवश्यकता होती है और यदि आपके पास इतना मुफ्त मेमोरी नहीं है तो कमांड विफल हो जाएगी।
फैबियानो

@ फैबियानो हाँ और? आपकी बात है ...?
अमेडी वैन गेससे

2
@AmedeeVanGasse मेरी बात यह है कि यदि आप सिर्फ MiBs और GiB की गणना से परेशान नहीं होना चाहते हैं, bs=तो ऐसा करने का उचित तरीका नहीं है, क्योंकि इसके अनपेक्षित परिणाम हैं, जैसे कि चोट दक्षता और संभवतः सबसे कम लागत वाली मेजबानी में काम नहीं करना। यदि आप सिर्फ आलसी हैं, तो आप दोनों के लिए गणित और एक कुशल ब्लॉक आकार चुनने का उपयोग करें count_bytesऔर करने दें dd: dd if=/dev/zero of=/swapfile count=4GiB iflag=count_bytes=)
Fabiano

iflag=count_bytesआपकी टिप्पणी में एक उत्कृष्ट सुधार है। और मैं आलसी नहीं हूं, मैं पठनीयता की परवाह करता हूं। 6 महीने के समय में जब मैंने अपनी स्क्रिप्ट को फिर से पढ़ा (या जब अगला अनुचर साथ आता है), पाठक को समझना चाहिए कि क्या चल रहा है। यह सिर्फ कंप्यूटर नहीं है जो कोड पढ़ते हैं, मनुष्य कोड भी पढ़ते हैं!
एमी वैन गेंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.