swapfile के लिए ddocdate बनाम dd


19

मैं सोच रहा हूं कि स्वैफाइल बनाने में क्या अंतर है

fallocate -l 1G /swapfile

तथा

dd if=/dev/zero of=/swapfile bs=1024 count=1024

दोनों ठीक काम करने लगते हैं, लेकिन क्या एक का दूसरे पर फायदा है?

केवल एक चीज जो मुझे ऑनलाइन मिल सकती थी, वह fallocateयह थी कि सभी फाइल सिस्टम पर काम नहीं होता।


1
fallocateआमतौर पर तेज होता है (क्योंकि यह शून्य के साथ बनाई गई फ़ाइल को नहीं भरता है) - अन्यथा कोई मतभेद नहीं है, हालांकि अंतिम परिणाम समान है। देखें: antipaucity.com/2017/08/31/…
जोनासकज - मोनिका

1
@JonasCz: हाँ ... लेकिन नहीं! देखिए मुरु का जवाब
डेविड फ़ॉस्टर

जवाबों:


22

से मैनपेज :mkswap

Note  that  a  swap  file  must  not contain any holes.  Using cp(1) to
create the file is not acceptable.  Neither is use of  fallocate(1)  on
file  systems  that support preallocated files, such as XFS or ext4, or
on copy-on-write filesystems like btrfs.   It  is  recommended  to  use
dd(1)  and  /dev/zero in these cases.  Please read notes from swapon(8)
before adding a swap file to copy-on-write filesystems.

और से मैनपेज :swapon

You should not use swapon on a file with holes.  This can  be  seen  in
the system log as

      swapon: swapfile has holes.

The  swap file implementation in the kernel expects to be able to write
to the file directly, without the assistance of the  filesystem.   This
is  a problem on preallocated files (e.g.  fallocate(1)) on filesystems
like XFS or ext4, and on copy-on-write filesystems like btrfs.

यह इस प्रकार है, जबकि fallocateइससे तेज हो सकता है dd, यह स्वैप फाइल बनाने के लिए उपयुक्त नहीं है और स्वैप-संबंधित टूल द्वारा समर्थित नहीं है।


1
Mkswap मैनपेज भी कहता है: स्वैप फाइल सेट करने के लिए, mkswap के साथ इसे इनिशियलाइज़ करने से पहले उस फाइल को बनाना आवश्यक है, जैसे कि fallocate --length 8GiB swapfileमैं उलझन में हूँ जैसे कमांड का उपयोग कर रहा हूँ।
ठोकर

4
@stumblebee और यह फाइलसिस्टम पर ठीक काम करेगा, जो पूर्व-आवंटित फाइलों का समर्थन नहीं करता है, जहां फालोकेट अनिवार्य रूप से dd की तरह काम करेगा, लेकिन ext4 पर नहीं, जो कि डिफ़ॉल्ट है और अब तक सबसे ज्यादा इस्तेमाल किया जाने वाला लिनक्स फाइल सिस्टम है।
मुरु

2
मैं थोड़ा उलझन में हूं कि fallocateसमस्या क्यों होगी। ऐसा लगता है, ठीक है, अंतरिक्ष आवंटित करें। (जैसा कि यह लेबल पर कहता है।) और ऐसा fallocate -l 1g /swaptest && mkswap /swaptest && swapon /swaptestकरने से ext4किसी भी चीज़ की शिकायत नहीं होती है। truncate -l 1gयह अलग है, क्योंकि यह सिर्फ फ़ाइल आकार सेट करता है, लेकिन किसी भी ब्लॉक को आवंटित नहीं करता है।
ilkachachu

1
इसलिए यदि ऐसा नहीं किया जाता है, तो किसी को बग दर्ज करने की आवश्यकता है :)
विल क्रॉफर्ड

1
@ilkkachu किसी ने समस्या को नए सिरे से हल किया है, कम से कम: Bugzilla.redhat.com/show_bug.cgi?id=1129205
muru

1

फैलोकेट तेजी से है, फैलाने वाले मेनपेज से:

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

fallocate(1)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.