Saya tidak dapat mengaktifkan ruang Swap pada CentOS 7

55

Jadi saya mengikuti tutorial untuk menginstal OTRS yang merupakan Sistem Permintaan Tiket Open source. Jadi untuk menginstal, diperlukan: 4GB ruang Swap. Inilah perintah yang saya gunakan:

[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

Anda dapat melihat: Kesalahan argumen tidak valid di sini. Saya mencoba berkali-kali dengan sia-sia untuk mengaktifkannya. Seseorang tolong katakan padaku bagaimana cara memperbaiki kesalahan ini. (Saya menjalankan CentOS 7 ini pada AWS Instance EC2)

[root@ip-10-0-7-41 ~]# df -T | awk '{print $1,$2,$NF}' | grep "^/dev"
/dev/xvda1 xfs /
Yang satu
sumber
Sistem file apa ini terjadi? btrf kebetulan?
schaiba
@schaiba Halo, saya mengedit pertanyaan saya. Saya pikir filesystem adalah xfs.
The One
2
Pada XFS memang lebih baik digunakan dd. Harap diingat bahwa tidak semua sistem file mendukung swap atau setidaknya tidak dengan cara yang sama.
schaiba
@ schaiba Saya tidak tahu betul tentang tipe sistem file. Terima kasih banyak.
The One

Jawaban:

102

Masalahnya fallocate(1)adalah bahwa ia menggunakan filesystem ioctlsuntuk membuat alokasi cepat dan efektif, kerugiannya adalah tidak secara fisik mengalokasikan ruang tetapi swapon(2)syscall membutuhkan ruang nyata. Referensi: https://bugzilla.redhat.com/show_bug.cgi?id=1129205

Saya telah menghadapi masalah ini sebelumnya dengan kotak saya juga. Jadi alih-alih menggunakan fallocate, saya menggunakan ddseperti yang disarankan tautan

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

dan bergerak maju dengan chmod, mkswap& swaponperintah. Bingo! Itu berhasil.

Rahul
sumber
1
Aneh, file swap fallocate'd bekerja dengan baik untuk saya di Ubuntu 16.04.3 LTS tetapi gagal dengan "swapon gagal: Argumen tidak valid" pada Red Hat Enterprise Linux Server rilis 7.4 (Maipo). Perintah dd yang diberikan di atas memang berfungsi pada RedHat. Pasti ada sesuatu yang berbeda antara dua OS yang memungkinkan fallocate berfungsi di Ubuntu.
Davidian1024
Solusi berfungsi pada CentOS 7.5
NerdOfCode
ddtampaknya melakukan lebih banyak pekerjaan time dd if=/dev/zero of=/myswap count=4096 bs=1MiBmembutuhkan waktu 14,003 detik di mana time fallocate -l 4G /swap3membutuhkan waktu 0,018 detik, tetapi mereka menghasilkan file dengan ukuran yang sama. Saya menduga itu fallocatetidak menyalin dalam nol seperti ddhalnya dan swaponmembutuhkan nol itu.
Daniel Wisehart
swapon: /swapfile: read swap header failed: Invalid argumentmendapat kesalahan ini setelah mencoba ke swapon /swapfileserver puppetenterprise centos7
Brian Thomas
@ BrianThomas Ini sepertinya Anda lupa menjalankan mkswap pada file setelah Anda membuatnya dengan dd.
jblaine
17

Ikuti langkah-langkah ini, ini berfungsi pada tetesan DigitalOcean. Saya diuji. Ubah jumlah 4096 sesuai dengan kebutuhan Anda

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

tambahkan baris ini:

/swapfile   swap    swap    sw  0   0

jalankan perintah ini

sudo sysctl vm.swappiness=10

sudo nano /etc/sysctl.conf

tambahkan baris ini

vm.swappiness = 10
vm.vfs_cache_pressure = 50

Untuk memverifikasi ukuran swap

swapon --summary
free -h
Dylan B
sumber
2
ddPerintah saya adalah dd if=/dev/zero of=/swapfile count=4 bs=1GiBkarena saya tidak dapat repot menghitung mebibytes di gibibytes jika dddapat melakukannya untuk saya. Tahukah Anda bahwa pada zaman dahulu kala orang mengekspresikannya dalam kibibytes dan menghitungnya dengan tangan untuk gibibytes? Luar biasa!
Amedee Van Gasse
@AmedeeVanGasse Anda versi dari perintah dd sebenarnya membutuhkan 1GiB memori dan perintah akan gagal jika Anda tidak memiliki banyak memori bebas.
Fabiano
@ Fabiano, ya dan? Maksud Anda adalah ...?
Amedee Van Gasse
2
@AmedeeVanGasse poin saya adalah bahwa jika Anda hanya tidak ingin repot-repot menghitung MiBs dan GiBs, bs=bukan cara yang tepat untuk melakukan itu, karena memiliki konsekuensi yang tidak diinginkan, seperti efisiensi yang menyakitkan dan mungkin tidak bekerja pada sebagian besar host biaya rendah. Jika Anda hanya malas, gunakan count_bytesdan biarkan ddlakukan untuk Anda berdua matematika dan memilih ukuran blok yang efisien: dd if=/dev/zero of=/swapfile count=4GiB iflag=count_bytes=)
Fabiano
iflag=count_bytesmerupakan peningkatan yang sangat baik untuk komentar Anda. Dan saya tidak malas, saya peduli tentang keterbacaan. Dalam waktu 6 bulan ketika saya membaca skrip saya lagi (atau ketika pengelola berikutnya datang), pembaca harus memahami apa yang sedang terjadi. Bukan hanya komputer yang membaca kode, manusia juga membaca kode!
Amedee Van Gasse