Postępuję zgodnie z samouczkiem, aby zainstalować OTRS, który jest systemem Open Source Ticket Request System. Aby więc zainstalować, wymaga: 4 GB przestrzeni wymiany. Oto polecenie, którego użyłem:
[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
Możesz zobaczyć: Niepoprawny błąd argumentu tutaj. Na próżno próbowałem go włączyć. Ktoś, proszę, powiedz mi, jak naprawić ten błąd. (Używam tego CentOS 7 na AWS Instance EC2)
[root@ip-10-0-7-41 ~]# df -T | awk '{print $1,$2,$NF}' | grep "^/dev"
/dev/xvda1 xfs /
dd
. Pamiętaj, że nie wszystkie systemy plików obsługują wymianę lub przynajmniej nie w ten sam sposób.Odpowiedzi:
Problem
fallocate(1)
polega na tym, że używa systemu plików,ioctls
aby alokacja była szybka i skuteczna, wadą jest to, że fizycznie nie alokuje przestrzeni, aleswapon(2)
syscall wymaga prawdziwej przestrzeni. Odniesienie: https://bugzilla.redhat.com/show_bug.cgi?id=1129205Miałem już ten problem wcześniej z moim pudełkiem. Zamiast używać
fallocate
, użyłem,dd
jak sugeruje linkposuwają się do przodu i z
chmod
,mkswap
iswapon
poleceń. Bingo! Zadziałało.źródło
dd
wygląda na to, że wykonuje dużo więcej pracy,time dd if=/dev/zero of=/myswap count=4096 bs=1MiB
zajmuje 14,003 sekundy, atime fallocate -l 4G /swap3
zajmuje 0,018 sekundy, ale generują ten sam rozmiar pliku. Zgaduję, żefallocate
nie kopiuje zer tak jak todd
robi iswapon
potrzebuje tych zer.swapon: /swapfile: read swap header failed: Invalid argument
dostałem ten błąd po próbieswapon /swapfile
na serwerze centos7 puppetenterpriseWykonaj następujące kroki, działa na kropelki DigitalOcean. Testowałem. Zmień kwotę 4096 zgodnie z potrzebami
dodaj tę linię:
uruchom to polecenie
dodaj tę linię
Aby sprawdzić rozmiar wymiany
źródło
dd
polecenie byłobydd if=/dev/zero of=/swapfile count=4 bs=1GiB
dlatego, że nie mogę przejmować się obliczaniem mebibajtów w gibibajtach, jeślidd
może to dla mnie zrobić. Czy wiesz, że w dawnych czasach ludzie wyrażali to w kibibajtach i ręcznie obliczali to gibibajtom? Niesamowite!bs=
nie jest to właściwy sposób, ponieważ ma to niezamierzone konsekwencje, takie jak obniżenie wydajności i prawdopodobnie nie działa na większości tanich hostingu. Jeśli jesteś po prostu leniwy, używaćcount_bytes
i niechdd
dla was zrobić zarówno matematyki i wyborze efektywnego rozmiaru bloku:dd if=/dev/zero of=/swapfile count=4GiB iflag=count_bytes
=)iflag=count_bytes
to doskonała poprawa Twojego komentarza. I nie jestem leniwy, zależy mi na czytelności. Za 6 miesięcy, kiedy ponownie przeczytam skrypt (lub gdy pojawi się następny opiekun), czytelnik musi zrozumieć, co się dzieje. Nie tylko komputery czytają kod, ludzie też czytają kod!