จะเพิ่มพื้นที่สว็อปได้อย่างไร


127

โดยปกติฉันจะมีพื้นที่สว็อปพื้นที่ 250MB ใน Ubuntu และฉันต้องการขยายให้มีขนาดใหญ่ขึ้น ฉันต้องการ 800MB ซึ่งฉันคิดว่าเพียงพอที่จะเปิดแอปพลิเคชั่นหลายตัวโดยไม่ต้องเปลี่ยนขีด จำกัด ปัจจุบัน ฉันหวังว่าบางคนสามารถช่วยฉันได้


2
โปรดเปิด Gparted และโพสต์ภาพหน้าจอของสิ่งที่คุณเห็นที่นี่
Aaron Hill

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

คำตอบ:


171

คุณสามารถสร้างไฟล์สลับได้ตลอดเวลา

เพื่อเพิ่มพื้นที่สว็อปเพิ่มเติม สิ่งนี้ไม่เหมือนกัน (ในทุกด้าน) เป็นพาร์ติชันการสลับ แต่มันจะง่ายและไดนามิก

เปลี่ยน/media/fasthdd/swapfile.imgเป็นอะไรก็ได้ที่คุณชอบเช่น/swap.imgกัน /media/fasthdd/swapfile.imgเป็นเพียงชื่อไฟล์ตัวอย่างถ้าคุณใช้อันนี้แน่นอนต้องมีไดเรกทอรีที่/media/fasthdd/มีพื้นที่ว่างเพียงพอสำหรับไฟล์ swap ใหม่ของคุณ

ใช้เทอร์มินัลแอปพลิเคชันใด ๆ เพื่อเรียกใช้คำสั่ง คำสั่งทั้งหมดควรจะรันด้วยสิทธิพิเศษรูทการทำเช่นนี้คุณสามารถเพิ่มsudoไปยังจุดเริ่มต้นของทุกคำสั่งหรือเรียกใช้sudo bashก่อนที่จะเรียกใช้คำสั่ง

1. สร้างไฟล์เปล่า: ไฟล์
นี้จะมีเนื้อหาหน่วยความจำเสมือนดังนั้นสร้างไฟล์ให้ใหญ่พอสำหรับความต้องการของคุณ ไฟล์นี้จะสร้างไฟล์ 1Gb ซึ่งหมายถึง + 1Gb swap space สำหรับระบบของคุณ:

dd if=/dev/zero of=/media/fasthdd/swapfile.img bs=1024 count=1M

หากคุณต้องการที่จะทำให้ไฟล์ 3Gb count=3Mแล้วเปลี่ยนค่านับไป ดูman ddข้อมูลเพิ่มเติม

2. Bake swap file:
คำสั่งต่อไปนี้จะทำให้ "swap filesystem" ในไฟล์ swap ของคุณใหม่

mkswap /media/fasthdd/swapfile.img

3. นำขึ้นในการบูต:
เพื่อให้แน่ใจว่าพื้นที่ swap /etc/fstabใหม่ของคุณถูกเปิดใช้งานในขณะที่บูตเครื่องคอมพิวเตอร์ที่คุณควรเพิ่มเข้าไปในระบบแฟ้มแฟ้มการกำหนดค่า เพิ่มไปยังจุดสิ้นสุดของไฟล์ขอแนะนำให้ใช้เพราะระบบไฟล์อื่น ( อย่างน้อยหนึ่งไฟล์ที่มีไฟล์สลับ ) จะต้องติดตั้งในโหมดอ่านเขียนก่อนที่เราจะสามารถเข้าถึงไฟล์ใด ๆ

# Add this line to /etc/fstab
/media/fasthdd/swapfile.img swap swap sw 0 0

4. เปิดใช้งาน:
คุณสามารถรีบูตคอมพิวเตอร์ของคุณหรือเปิดใช้งานไฟล์ swap ใหม่ด้วยมือโดยใช้คำสั่งต่อไปนี้:

swapon /media/fasthdd/swapfile.img


หากทุกอย่างเป็นไปด้วยดี

คุณควรเห็นว่ามีพื้นที่สว็อปเพิ่มขึ้นพร้อมใช้งาน คุณสามารถใช้คำสั่งต่อไปนี้เพื่อตรวจสอบ swap ใหม่ของคุณและยืนยันว่ามันทำงานอยู่:

cat /proc/swaps
  Filename                           Type       Size    Used    Priority
  /media/fasthdd/swapfile.img        file       8388604 2724    -1

grep 'Swap' /proc/meminfo
  SwapCached:         4772 kB
  SwapTotal:       8388604 kB
  SwapFree:        8355812 kB

5
หากต้องการแก้ไข/etc/fstabลองใช้สิ่งนี้ที่บรรทัดคำสั่ง:sudo gedit /etc/fstab
Ben

นั่นช่วยฉันอย่างมากขอบคุณมาก ๆ
Breeze

จะปิดการแลกเปลี่ยนไฟล์ที่สร้างขึ้นใหม่ได้อย่างไร?
Breeze

1
รับมัน swapoff มัน!
Breeze

2
ใช้คำสั่ง "swapon -s" เพื่อดูสถานะมากกว่า "cat / proc / swaps" จากนั้นคำสั่ง "ฟรี" จะให้ข้อมูลการใช้ swap
Paul M

40

วิธี GUI สำหรับการเพิ่มขนาดของพาร์ติชัน swap

วิธีที่จะเพิ่มขนาดการแลกเปลี่ยนก็คือการใช้ตัวแก้ไขพาร์ทิชัน GParted กล่าวโดยย่อคือคุณปรับขนาดพาร์ติชันสลับจากนั้นคลิกขวาแล้วเลือก "สลับ"

ง่ายกว่าในการบูต gparted-live-disk หรือ Ubuntu live disk (เพื่อให้/dev/sdaพาร์ติชันทั้งหมดจะถูก unmount) หากคุณใช้งาน Ubuntu live disk คุณจะต้องติดตั้ง gparted โดยใช้คำสั่งด้านล่าง:

sudo apt-get update
sudo apt-get install gparted && sudo gparted

คุณต้องสามารถเพิ่มขนาดของพาร์ติชันการสลับได้เฉพาะในกรณีที่มีพื้นที่ที่ไม่สามารถจัดสรรได้ก่อนหรือหลังพาร์ติชันการแลกเปลี่ยน หากไม่มีพื้นที่ที่ไม่ได้ปันส่วน (พื้นที่ที่เราพยายามเพิ่มด้วย swap partition) ด้านล่างหรือด้านบนของ swap partition เราต้องปรับขนาดพาร์ติชั่นและรับพื้นที่ที่ไม่ได้ถูกจัดสรร

กรณีที่ 1 - มีการจัดสรรพื้นที่ก่อนหรือหลังพาร์ติชันสลับ

พาร์ติชัน GParted

ในภาพหน้าจอด้านบนฉันมีพื้นที่ว่างที่ไม่ได้ปันส่วน 11.4 GB ก่อน linux-swap และ 12.8 GB หลังจากพาร์ทิชัน swap

  • ในการปรับขนาดให้คลิกขวาที่ swap partition (/ dev / sda9 ที่นี่) และคลิกที่ตัวเลือก Resize / Move มันจะมีลักษณะเช่นนี้:

    ป้อนคำอธิบายรูปภาพที่นี่

  • ลากลูกศรเลื่อนไปทางซ้ายหรือขวาจากนั้นคลิกที่ปุ่มปรับขนาด / ย้าย พาร์ทิชัน swap ของคุณจะถูกปรับขนาด


กรณีที่ 2 - พื้นที่ที่ไม่ได้ปันส่วนอยู่ระหว่างพาร์ติชัน

ป้อนคำอธิบายรูปภาพที่นี่

ในภาพหน้าจอด้านบนพื้นที่ที่ไม่ได้ปันส่วนซึ่งเราต้องการเพิ่มในพาร์ทิชัน swap อยู่ระหว่างdev/sda7และ/dev/sda8เพื่อที่จะย้ายพื้นที่ที่ไม่ได้ปันส่วนจากพื้นที่ดังกล่าวไปยังพื้นที่ด้านบนของพาร์ติชัน swap เราต้องทำตามขั้นตอนง่าย ๆ ดังนี้

  • คลิกขวาที่พาร์ติชัน / dev / sda8 และคลิกที่ตัวเลือกการปรับขนาด / ย้าย

    ป้อนคำอธิบายรูปภาพที่นี่

  • คลิกและเลื่อนตัวเลื่อนไปทางซ้ายสุดเพื่อให้พื้นที่ที่ไม่ได้ปันส่วนซึ่งอยู่เหนือ/dev/sda8พาร์ติชันจะอยู่ด้านล่าง/dev/sda8หลังจากนั้นคลิกปุ่มปรับขนาด / ย้าย

  • และตอนนี้พื้นที่ที่ไม่ได้ปันส่วนนั้นอยู่เหนือพาร์ติชัน swap ซึ่งก็เหมือนกับกรณีที่ 1ตอนนี้ทำตามกรณีที่ 1


กรณีที่ 3 - ถ้ามีการจัดสรรพื้นที่ว่างนอกพาร์ติชันเสริม)

ป้อนคำอธิบายรูปภาพที่นี่

ฉันมีพื้นที่ที่ไม่ได้ปันส่วน 18 GB ด้านล่างไปยังพาร์ติชันเสริมเมื่อต้องการเพิ่มพื้นที่นี้ในพาร์ติชัน linux-swap (ซึ่งมีอยู่ในพาร์ติชันเสริม) เราต้องทำตามขั้นตอนด้านล่าง

  • คลิกขวาที่พาร์ติชันเสริมและเลือกตัวเลือกปรับขนาด / ย้ายไฟล์จะเป็นเหมือนภาพหน้าจอด้านล่าง

    ป้อนคำอธิบายรูปภาพที่นี่

  • คลิกและลากลูกศรไปทางขวาสุดและคลิกที่ปรับขนาด / ย้ายเพื่อให้พื้นที่ที่ไม่ได้จัดสรรจำนวน 18 GB จะอยู่ที่ด้านล่างของพาร์ติชันเสริมฉันมีพื้นที่ที่ไม่ได้จัดสรรที่ 14.80 GB อยู่ด้านล่างและตอนนี้ 18.34 GB รวมกับที่เพื่อสร้างพื้นที่ที่ไม่ได้ปันส่วน (18.34 + 14.80 GB) ที่ด้านล่างของพาร์ติชันเสริม

  • ขณะนี้มีพื้นที่ว่างที่ไม่ได้ปันส่วนด้านล่างให้กับพาร์ติชัน swap มันจะเหมือนกับกรณีที่ 1จากนั้นทำตามกรณีที่ 1

หมายเหตุ: อย่าลืมสำรองข้อมูลสำคัญทั้งหมดของคุณก่อนที่จะดำเนินการข้างต้น


2
คู่มือที่ยอดเยี่ยมเกี่ยวกับเครื่องมือ GUI, สมควรได้รับ ++ ตามที่เป็นอยู่ อย่างไรก็ตามอาจมีคำเตือนเกี่ยวกับความเสี่ยงที่อาจเกิดขึ้นจากการแก้ไขพาร์ติชัน ง่าย MBR คู่มือการสำรองข้อมูลหรือเชื่อมโยงไปยังคู่มือดังกล่าวจะเป็นนอกจากนี้ที่ดี, ข้อผิดพลาดที่อาจจะไม่น่า แต่ค่าใช้จ่ายที่อาจจะได้รับสูง + การสำรองข้อมูล MBRจะไม่ใช้เวลามากเกินไปหรือพื้นที่และสามารถบันทึกการทำงานมากพื้นที่และเวลาเมื่อทำอย่างถูกต้อง
Sampo Sarrala

2
อย่าลืม swapon คลิกขวาที่ swap partition และ swapon
user3752281

29

นอกจากนี้คุณยังสามารถใช้fallocateถ้าคุณต้องการจองพื้นที่สำหรับ swapfile ของคุณโดยไม่จำเป็นต้องกรอกข้อมูลไฟล์ที่มี 0 ddถึง

จากmanหน้า:

DESCRIPTION
   fallocate  is  used  to preallocate blocks to a file.  For filesystems which support the fallocate system call, this is done quickly by
   allocating blocks and marking them as uninitialized, requiring no IO to the data blocks.  This is much faster than creating a  file  by
   filling it with zeros.

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

fallocateการใช้งานที่ง่ายสำหรับการเพิ่มไฟล์สลับที่สอง

ตรวจสอบสถานการณ์การแลกเปลี่ยน:

$ sudo swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        262140  246276  -1

สร้างไฟล์ swap 4G

วิธีมาตรฐานในการสร้างและเปิดใช้งานไฟล์สลับ

$ size="4G" && file_swap=/swapfile_$size.img && sudo touch $file_swap && sudo fallocate -l $size /$file_swap && sudo mkswap /$file_swap && sudo swapon -p 20 /$file_swap

ทำให้การแลกเปลี่ยนของคุณเป็นแบบถาวร

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

ในไฟล์ / etc / fstab ของคุณให้สังเกตว่าลำดับความสำคัญของการแลกเปลี่ยนก่อนหน้าคือ 10

/swapfile    none    swap    sw,pri=10      0       0
/swapfile_4G.img     none    swap    sw,pri=20      0       0

ตรวจสอบสถานการณ์การแลกเปลี่ยนหลังจากรีบูต:

$ sudo swapon  -s
Filename       Type     Size        Used    Priority
/swapfile      file     262140      0       10
/swapfile_4G.img       file     4194300     0       20

ลบหนึ่งในพื้นที่สว็อป (ตัวอย่างเช่น 256Mb ดั้งเดิม)

แก้ไข /etc/fstab

ลบบรรทัดที่เกี่ยวข้องกับการแลกเปลี่ยนที่คุณต้องการลบ

ลบการสลับนั้น

ลบและลบไฟล์สลับ

sudo swapoff /mnt/swapfile && sudo rm /mnt/swapfile

แหล่งข้อมูล:


2
1 ขึ้นไป fallocateดีกว่ามากddถ้า fs ของคุณรองรับ ผู้เดินสมุทรรายหนึ่งยังคงรู้สึกอ่านยากอาจจะง่ายกว่าที่จะศึกษาว่าสิ่งเหล่านั้นจะถูกแบ่งออกเป็นคำสั่งจริงหรือไม่?
Sampo Sarrala

2
นี่เป็นตัวอย่างของคำตอบที่สมบูรณ์แบบเข้าใจง่ายมากใช้งานง่าย มันทำงานได้อย่างมีเสน่ห์ในอูบุนตู 18
Damián Rafael Lattenero

7

ในกรณีของฉันฉันมีไฟล์ swap ซึ่งฉันคิดว่าเป็น 1GB แต่เมื่อฉันดูมันให้ละเอียดยิ่งขึ้นมันมีขนาดใหญ่เพียง 256 MB และเมื่อรวบรวมเนื้อหาทางรถไฟของฉันล่วงหน้าเซิร์ฟเวอร์จะมีหน่วยความจำไม่เพียงพอ

Errno::ENOMEM: Cannot allocate memory - nodejs

ฉันสร้างไฟล์ swap ตามที่อธิบายไว้ที่นี่: https://stackoverflow.com/a/34885004/784318

ตอนนี้บรรทัดที่สร้างไฟล์ว่างที่เรียกว่า/swapfileเป็นดังนี้:

sudo dd if=/dev/zero of=/swapfile bs=1024 count=256k

ตอนนี้เพื่อปรับขนาด swapfile ฉันต้องทำขั้นตอนง่าย ๆ เหล่านี้:

# Reboot the system to be able to switch swapping off
sudo reboot

# Turn swap off
sudo swapoff -a

# Delete the `/swapfile`
rm -f /swapfile

# Recreate the swapfile but with double file size memory
sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k

# Turn swap back on
sudo swapon -s

# Change the permission to non-world-readable
sudo chown root:root /swapfile 
sudo chmod 0600 /swapfile

# Use the swap file
sudo mkswap /swapfile
sudo swapon /swapfile

ไฟล์ถูกสร้างขึ้น (536870912/1024/1024 = 512 MB):

ls -lia /swapfile 
768 -rw------- 1 root root 536870912 Apr 27 07:54 /swapfile

ใช้free -mคำสั่งฉันจะเห็นว่าไฟล์นี้เป็น 512 MB เหมือนที่คาดไว้:


คุณไม่ควรใช้แฟล็ก -r ที่อันตรายด้วยคำสั่ง rm สำหรับการลบไฟล์เดียว rm -f ควรมากกว่าเพียงพอ
Sampo Sarrala

1
@SampoSarrala ขอบคุณสำหรับหัวขึ้นฉันเปลี่ยนสคริปต์ตาม
เบซิ

@Besi ขอบคุณ! นี่คือสิ่งที่ฉันต้องการเพื่อเพิ่มขนาดไฟล์สวอปในระบบ Ubuntu 18.04 LTS ของฉัน มันทำงานตรงตามที่คุณเขียน ความช่วยเหลือที่ยอดเยี่ยม !!!
B-radical

ฉันชอบโซลูชันนี้เพราะเป็นบรรทัดคำสั่งไม่ต้องแบ่งพาร์ติชันใหม่และอธิบายว่าต้องทำอย่างไรถ้ามีไฟล์ swapfile อยู่แล้ว
cxrodgers

3

วิธีเพิ่มไฟล์สลับ

  1. ไฟล์ creat .img

    sudo dd if = / dev / ศูนย์ของ = / swap.img bs = 1M นับ = 1,000

หมายเหตุ!: bs = 1M นับ = 1,000 ==> 1GB

(bs * count = ขนาดเป็นเมกะไบต์)

ตัวอย่างอื่น ๆ :

sudo dd if = / dev / ศูนย์ของ = / swap.img bs = 10M count = 100

  1. รูปแบบไฟล์. img

    sudo mkswap /swap.img

  2. เปิดใช้งานไฟล์สลับ

    sudo swapon /swap.img

  3. เพิ่มไฟล์ swap เพื่อ fstab

เพิ่มบรรทัดนี้ไปยัง fstab ของคุณ (/ etc / fstab)

/swap.img   none            swap    sw              0       0

ฉันมักจะตั้งป้ายกำกับบน swap เช่น "mkswap -L SWAP2"
พอล M

หมายเหตุ: นี่เป็นคำตอบเดียวกับคำตอบที่ได้รับการยอมรับมากที่สุดของ Sampo Sarria แต่มีบริบทน้อยลงและมีการเพิ่ม img ในการแลกเปลี่ยนโดยตรงไปที่รูทแทน / media / fasthdd
steel

0

ปรับขนาด Swap เป็น 8GB

# Turn swap off
# This moves stuff in swap to the main memory and might take several minutes
sudo swapoff -a

# Create an empty swapfile
# Note that "1G" is basically just the unit and count is an integer.
# Together, they define the size. In this case 8GB.
sudo dd if=/dev/zero of=/swapfile bs=1G count=8

sudo mkswap /swapfile  # Set up a Linux swap area
sudo swapon /swapfile  # Turn the swap on

ตรวจสอบว่ามันทำงาน

grep Swap /proc/meminfo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.