Tôi không thể bật Swap space trên CentOS 7


55

Vì vậy, tôi đang làm theo hướng dẫn để cài đặt OTRS là Hệ thống yêu cầu vé nguồn mở. Vì vậy, để cài đặt, nó đòi hỏi: 4GB dung lượng Hoán đổi. Đây là lệnh tôi đã sử dụng:

[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

Bạn có thể thấy: Lỗi đối số không hợp lệ ở đây. Tôi đã cố gắng vô ích để kích hoạt nó. Một số người vui lòng cho tôi biết cách khắc phục lỗi này. (Tôi đang chạy CentOS 7 này trên AWS Instance EC2)

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

Hệ thống tập tin này đang xảy ra trên? btrfs bằng cơ hội nào?
schaiba

@schaiba Xin chào, tôi đã chỉnh sửa câu hỏi của mình. Tôi nghĩ hệ thống tập tin là xfs.
Một

2
Trên XFS thực sự tốt hơn để sử dụng dd. Xin lưu ý rằng không phải tất cả các hệ thống tập tin đều hỗ trợ trao đổi hoặc ít nhất là không theo cùng một cách.
schaiba

@schaiba Tôi không biết nhiều về loại hệ thống tập tin. Cám ơn rất nhiều.
Một

Câu trả lời:


102

Vấn đề với fallocate(1)là nó sử dụng hệ thống tập tin ioctlsđể phân bổ nhanh và hiệu quả, nhược điểm là nó không phân bổ vật lý không gian nhưng tòa nhà cao tầng swapon(2)đòi hỏi phải có không gian thực. Tham khảo: https://ormszilla.redhat.com/show_orms.cgi?id=1129205

Tôi cũng đã đối mặt với vấn đề này sớm hơn với hộp của tôi. Vì vậy, thay vì sử dụng fallocate, tôi đã sử dụng ddnhư liên kết gợi ý

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

và di chuyển về phía trước với chmod, mkswap& swaponcác lệnh. Chơi lô tô! Nó đã làm việc.


1
Thật lạ lùng, một tệp hoán đổi giả mạo hoạt động tốt với tôi trên Ubuntu 16.04.3 LTS nhưng nó không thành công với "hoán đổi thất bại: Đối số không hợp lệ" trên Red Hat Enterprise Linux Server phát hành 7.4 (Maipo). Lệnh dd được cung cấp ở trên thực sự hoạt động trên RedHat. Phải có một cái gì đó khác biệt giữa hai hệ điều hành cho phép thuật ngữ hoạt động trên Ubuntu.
Davidian1024

Giải pháp hoạt động trên CentOS 7.5
NerdOfCode

dddường như đang thực hiện nhiều công việc hơn time dd if=/dev/zero of=/myswap count=4096 bs=1MiBmất 14.003 giây trong đó time fallocate -l 4G /swap3mất 0,008 giây, nhưng chúng tạo ra cùng một tệp kích thước. Tôi đoán rằng fallocatekhông sao chép số không theo cách ddnào và swaponcần những số không đó.
Daniel Wisehart

swapon: /swapfile: read swap header failed: Invalid argumentđã gặp lỗi này sau khi thử swapon /swapfiletrên máy chủ múa rối centos7
Brian Thomas

@BrianThomas Điều này nghe có vẻ như bạn quên chạy mkswap trên tệp sau khi bạn tạo nó bằng dd.
jblaine

17

Thực hiện theo các bước này, nó hoạt động trên các giọt của DigitalOcean. Tôi đã thử nghiệm. Thay đổi số tiền 4096 theo nhu cầu của bạn

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

thêm dòng này:

/swapfile   swap    swap    sw  0   0

chạy lệnh này

sudo sysctl vm.swappiness=10

sudo nano /etc/sysctl.conf

thêm dòng này

vm.swappiness = 10
vm.vfs_cache_pressure = 50

Để xác minh kích thước của trao đổi

swapon --summary
free -h

2
ddLệnh của tôi sẽ là dd if=/dev/zero of=/swapfile count=4 bs=1GiBvì tôi không thể bị làm phiền với việc tính toán các mebibytes trong gibibytes nếu ddcó thể làm điều đó cho tôi. Bạn có biết rằng vào thời của mọi người, người ta đã thể hiện nó bằng kibibytes và tính toán bằng tay với gibibytes? Đáng kinh ngạc!
Amedee Van Gasse

@AmedeeVanGasse phiên bản của lệnh dd thực sự cần 1GiB bộ nhớ và lệnh sẽ thất bại nếu bạn không có nhiều bộ nhớ trống đó.
Fabiano

@Fabiano có và? Quan điểm của bạn là ...?
Amedee Van Gasse

2
@AmedeeVanGasse Quan điểm của tôi là nếu bạn không muốn tính toán MiB và GiB, bs=thì đó không phải là cách thích hợp để làm điều đó, vì nó có hậu quả không lường trước, như hiệu quả bị tổn thương và có thể không hoạt động trên hầu hết các máy chủ lưu trữ chi phí thấp. Nếu bạn chỉ lười biếng, hãy sử dụng count_bytesddlàm cho bạn cả toán học và chọn kích thước khối hiệu quả: dd if=/dev/zero of=/swapfile count=4GiB iflag=count_bytes=)
Fabiano

iflag=count_byteslà một cải tiến tuyệt vời để bình luận của bạn. Và tôi không lười biếng, tôi quan tâm đến khả năng đọc. Trong 6 tháng khi tôi đọc lại kịch bản của mình (hoặc khi người bảo trì tiếp theo xuất hiện), người đọc phải hiểu điều gì đang xảy ra. Không chỉ máy tính đọc mã, con người cũng đọc mã!
Amedee Van Gasse
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.