Bagaimana Linux tahu di mana partisi swap-nya?

13

Saya telah membaca bahwa Anda perlu meletakkan partisi swap pada HDD daripada SSD.

Pertanyaan saya adalah sebagai berikut:

  • Kapan dan bagaimana "pengecekan" dilakukan oleh distribusi (atau sesuatu yang lain) untuk menemukan partisi Swap-nya?
  • Apakah itu terjadi saat boot?
  • Itu hanya memeriksa semua disk yang tersedia dan mencari partisi dengan flag 'swap'?
  • Apa yang terjadi jika ada beberapa partisi seperti itu?
  • Juga, berapa banyak partisi swap yang harus saya miliki jika saya menjalankan, misalnya, dua distribusi berbeda pada disk yang sama, katakanlah Fedora dan Ubuntu?
Ne Nenne
sumber
17
Perhatikan bahwa swap pada SSD sebenarnya akan menjadi swap yang benar-benar hebat (macOS melakukannya untuk waktu yang lama). Namun ini akan melakukan baca / tulis tambahan ke SSD yang mungkin mengurangi masa pakainya.
Nonyme
20
Di mana Anda membaca bahwa swap harus pada HDD bukan SSD? Juga, berapa umur artikel atau komentar itu? SSD modern jauh lebih baik dalam meratakan keausan dan tidak gagal setelah berulang kali menulis seperti yang mereka lakukan ketika SSD baru. Juga, jika Anda memiliki komputer yang hanya memiliki SSD, maka Anda benar-benar tidak punya banyak pilihan, selain tidak menggunakan swap sama sekali
JDS
2
@zakinster: Bagaimana bila drive 1TB Anda selalu penuh? Kebutuhan penyimpanan telah meningkat dengan ketentuan penyimpanan.
Lightness Races dengan Monica
3
Dengan kata lain, "ya saya setuju, bertentangan dengan pernyataan saya sebelumnya ukuran sebenarnya disk tidak relevan - berapa banyak yang Anda gunakan"
Lightness Races with Monica
6
@ Davidvidchwartz Dan, jika Anda "menggunakan swap dalam jumlah yang signifikan", sementara SSD akan menghasilkan kerugian kinerja sistem yang jauh lebih sedikit daripada HDD, pilihan yang lebih baik adalah menambahkan RAM lebih banyak ke sistem, atau mengurangi virtual jejak memori dari beban kerja Anda dalam beberapa cara untuk menghentikan penggunaan swap yang signifikan. Juga perhatikan ada perbedaan antara sistem berjalan lama yang telah mengisi swap dengan data yang hampir tidak pernah digunakan vs sistem yang aktif bertukar dan memindai ...
twalberg

Jawaban:

24

Ruang swap yang dikonfigurasi secara statis (tipe yang digunakan oleh hampir semua distribusi) dikonfigurasikan /etc/fstabseperti halnya filesystem.

Entri khas terlihat seperti:

UUID=21618415-7989-46aa-8e49-881efa488132    none    swap     sw      0  0

Anda juga dapat melihat salah satu discardatau yang nofailditentukan di bidang bendera (bidang keempat). Setiap baris seperti itu berkorespondensi dengan satu area swap (tidak harus berupa partisi, Anda dapat memiliki file swap, atau bahkan seluruh disk swap).

Dalam beberapa kasus yang benar-benar spesifik, Anda mungkin sebagai gantinya telah mengkonfigurasi ruang swap dinamis, meskipun ini agak jarang karena dapat menyebabkan perilaku bermasalah yang berkaitan dengan manajemen memori. Dalam hal ini, konfigurasi ditangani sepenuhnya oleh komponen userspace yang membuat dan memungkinkan bertukar file sesuai kebutuhan saat run time.

Sejauh berapa banyak yang Anda butuhkan, itu adalah pertanyaan yang rumit untuk dijawab, tetapi jumlah distribusi Linux yang berbeda yang Anda rencanakan untuk dijalankan tidak memiliki dampak pada hal ini kecuali Anda ingin dapat menjalankan satu distribusi sementara Anda memiliki yang lain dalam hibernasi (dan Anda mungkin tidak ingin melakukan ini, karena ini adalah cara yang sangat mudah untuk mengacaukan sistem Anda).

Saat Anda menjalankan installer untuk hampir semua distribusi utama (termasuk Fedora, OpenSUSE, Linux Mint, Debian, dan Ubuntu), ia akan mendeteksi partisi swap yang ada pada sistem, dan menambahkannya ke konfigurasi untuk distribusi yang Anda inginkan. menginstal (kecuali mungkin jika Anda memilih partisi manual), dan dalam kebanyakan kasus ini akan menghasilkan sistem yang dikonfigurasi secara masuk akal.

Terlepas dari itu, saya pribadi menyarankan untuk tidak memiliki banyak partisi swap kecuali jika Anda berbicara tentang sistem server dengan banyak disk, dan bahkan kemudian Anda benar-benar perlu tahu apa yang Anda lakukan untuk mendapatkan pengaturan sehingga berkinerja baik .

Austin Hemmelgarn
sumber
Jika Anda memiliki 2 distro Linux, Anda mungkin memiliki satu partisi swap untuk sistem ... jadi Anda dapat mencoba melakukan hibernasi dan melanjutkan ... (lebih baik menggunakan BTW pengguna yang berbeda dan Anda juga memerlukan /tmppartisi / direktori yang berbeda ). Mungkin dalam hal ini lebih baik untuk memiliki mesin virtual ...
Hastur
Jadi apa yang disarankan bagi seseorang untuk dilakukan jika mereka memiliki partisi khusus untuk swap pada SSD yang sama dengan Linux OS diinstal, bagaimanapun, tampaknya tidak benar-benar memiliki swap atau untuk digunakan. Jika saya menjalankan systemctl --all | grep swapsaya mendapatkan dua hasil. dev-disk-by\x2duuid-1c692cc4\x2df942\x2d4478\x2dad0f\x2d266b7484273a.swapdan swap.targetkeduanya AKTIF = tidak aktif dan SUB = mati . Bagaimana saya membuat sistem saya menggunakan area swap?
Rockin4Life33
21

katakanlah Fedora dan Ubuntu?

… Keduanya merupakan sistem operasi systemd saat ini.

Apa yang terjadi dalam sistem operasi systemd

mekanisme asli

Systemd mempekerjakan berbagai jenis unit. .mountfile unit menginstruksikannya untuk memasang volume. .swapfile unit memerintahkannya untuk memberi tahu kernel tentang partisi swap. ( .servicefile unit menginstruksikan cara menjalankan layanan. Dan sebagainya.) Ini adalah mekanisme systemd asli. Untuk memberlakukannya, systemd sendiri memotong proses anak yang membuat panggilan sistem yang relevan.

Jika Anda menggunakan systemctlperintah (with --all) pada sistem operasi systemd, itu akan memberi tahu Anda tentang .swapunit yang dimuat . Sebagai contoh:

dev-disk-by \ x2dpartuuid-40549710 \ x2d05.swap aktif aktif / dev / disk / by-partuuid / 40549710-05
dev-disk-by \ x2duuid-1bb589e8 \ x2d929f \ x2d4041 \ x2d81f4 \ x2dff2b339b4e2a.tukar dimuat aktif / dev / disk / oleh-uuid / 1bb589e8-929f-4041-81f4b2b3
dev-sda5.swap dimuat aktif / dev / sda5 aktif

Ini juga akan memberi tahu Anda tentang .mount unit.

Administrator sistem sebenarnya dapat menulis .swapfile unit tersebut dengan tangan, seperti halnya xe dapat menulis .service,.socket dan file satuan lainnya dengan tangan. systemd sendiri hanya mencari file unit dalam sistem file. Mereka adalah mekanisme aslinya.

Satu bahkan bisa mendapatkan systemd untuk menunjukkan kepada Anda apa yang ada di file unit ini dan di mana dalam filesystem mereka dapat ditemukan:

$ systemctl cat dev-disk-by \\ x2duuid-1bb589e8 \\ x2d929f \\ x2d4041 \\ x2d81f4 \\ x2dff2b339b4e2a.swap 
# /run/systemd/generator/dev-disk-by¡x2duuid-1bb589e8\x2d929fx2d4041\x2d81f4\x2dff2b339b4e2a.swap
# Secara otomatis dihasilkan oleh systemd-fstab-generator

[Satuan]
SourcePath = / etc / fstab
Dokumentasi = man: fstab (5) man: systemd-fstab-generator (8)

[Menukar]
What = / dev / disk / by-uuid / 1bb589e8-929f-4041-81f4-ff2b339b4e2a
Opsi = sw
$ 

file unit yang dihasilkan secara otomatis

Orang dapat menulisnya dengan tangan. Biasanya namun seperti .mountdan .swapfile Unit secara otomatis dihasilkan oleh program yang dikenal sebagai generator . Dua generator tersebut adalah systemd-fstab-generatordan systemd-gpt-auto-generator. Keduanya berjalan di awal proses bootstrap dan sebagai respons terhadap systemctl daemon-reloadperintah, dan (seperti yang Anda lihat di atas) mereka menghasilkan seluruh beban file unit ke dalam subdirektori tidak berdokumen di /run/systemd/. systemd sendiri hanya menggunakan file unit yang dihasilkan tersebut .

Mantan generator membaca /etc/fstab, mengenali beberapa ekstensi systemd ke format file itu. Seperti yang saya tunjukkan dalam komentar jawaban, secara tradisional partisi swap yang memiliki tipe gunung dari swdan itu adalah bagaimana orang akan menemukan bahwa sistem operasi lain mengenali catatan swap tabel ini. Tetapi perangkat lunak Linux telah mengambil alternatif untuk mengenali tipe VFS , mencari swapsebagai tipe VFS. systemd-fstab-generatortidak terkecuali di sini, dan itulah yang ditafsirkan /etc/fstabketika mengubahnya menjadi mekanisme asli.

Generator yang terakhir memproses tabel partisi EFI yang ada di disk yang sama yang memegang Partisi Sistem EFI, mencari entri tabel partisi EFI yang memiliki berbagai GUID jenis partisi terkenal . Salah satu dari GUID tersebut adalah GUID konvensional yang ditugaskan untuk partisi swap Linux; dan jika systemd-gpt-auto-generatormenemukan partisi dengan GUID itu (yang memenuhi kriteria yang diberikan dalam systemd doco) itu akan membuat .swapunit untuk itu; tidak /etc/fstabterlibat sama sekali .

Tentu saja, proses ini memiliki banyak efek samping. Misalnya, karena /etc/fstabtidak memiliki kunci utama ke tabel, catatan dapat memiliki duplikat "spec" dan "file" (yaitu "apa" dan "di mana") bidang. Dalam mekanisme systemd asli, meskipun, bidang "file" (yaitu "di mana") adalah kunci unik untuk .mountunit, tertanam ke dalam nama unit. Tidak ada dua .mountunit yang dapat membagikannya. Untuk .swapunit, bidang "spec" (yaitu "apa") adalah kunci unik untuk unit. Tidak ada dua .swapunit yang dapat membagikannya. Jadi, tidak semua catatan /etc/fstabharus dapat dikonversi ke mekanisme asli dan akan berfungsi, terutama jika orang melakukan hal-hal seperti mendaftar titik mount yang sama untuk dua tujuan yang berbeda atau daftar partisi swap yang sama dalam dua cara berbeda.

Demikian pula, karena telah diterjemahkan /etc/fstabke dalam mekanisme asli dan mekanisme asli systemd memiliki cara lain untuk mengaktifkan unit , perilaku ini agak berbeda dengan sistem operasi non-systemd. Sebuah .mountunit akan, secara default, diaktifkan secara otomatis olehsystemd-udevd , bahkan setelah bootstrap, sebagai respons terhadap penampilan perangkat penyimpanan yang dipasang. Atau dapat didaftarkan sebagai Wants=atau Requires=dari beberapa .serviceatau .socketunit, yang berarti bahwa itu akan (diaktifkan kembali) ketika mereka. Bahkan ada RequiresMountsFor=.

program pemasang dan cara systemd

Secara tradisional, program penginstal sistem operasi, dan administrator systemd setelah itu mengkonfigurasi ulang sistem, memiliki swentri tertulis /etc/fstab. Dan begitulah akhirnya yang asli .mountdan .swapunit dihasilkan secara otomatis. Utilitas instal / konfigurasi "tahu" di mana file swap diletakkan, karena dalam antarmuka penggunanya administrator sistem membuat semacam pilihan, dan menulis yang /etc/fstabcocok. Terkadang pilihan itu adalah saya ingin Anda menjadikan saya partisi swap sebagai bagian dari instalasi. ; terkadang hanya menggunakan partisi swap yang sudah Anda temukan di disk. (installer juga melihat tipe partisi).

Tetapi orang-orang systemd memiliki ide sistem operasi yang secara otomatis mengkonfigurasi diri mereka sendiri dari /etcpohon yang sebagian besar kosong , yang disebut sistem stateless , dan itulah mekanisme seperti generator yang membaca tabel partisi EFI. Dalam rencana orang-orang systemd, tidak ada /etc/fstab, dan memang tidak ada data konfigurasi persisten /etcdi bawah sama sekali, dan semua hal ini disimpulkan dari isi tabel partisi pada disk , di setiap bootstrap dan setiap systemctl daemon-reload. Mereka saat ini mempromosikan program installer sistem operasi daripada tidak menulis/etc/fstab .

Dalam skema tradisional, tentu saja Anda memang dapat memiliki masing-masing sistem operasi memiliki partisi swap pribadi, dan tidak memiliki mereka menyentuh partisi swap satu sama lain. Dan memang jika Anda menggunakan hibernate untuk disk melalui partisi swap dan berharap untuk dapat multi-boot ke sistem operasi lain sementara hibernasi ( yang merupakan ide yang sangat buruk karena sangat mudah menyebabkan korupsi filesystem dengan cara ini ) yang akan menjadi perlu.

Dalam skema systemd, bahkan jika sistem operasinya belum sesuai dengan systemd yang orang bayangkan dan "stateless", generator tersebut dijalankan; dan karenanya semua partisi swap (pada ESP / root disc) dengan tipe partisi yang diperlukan secara otomatis digunakan oleh semua sistem operasi systemd. Karena mereka akan membagikan semua partisi swap yang ditemukan secara otomatis, partisi swap yang benar-benar tidak perlu dibuat untuk setiap sistem operasi yang diinstal.

Bacaan lebih lanjut

JdeBP
sumber
Bagus sekali - terima kasih atas penjelasannya!
Andy Dalton
Ada bagian dari diri saya yang ingin memilih Anda hanya karena berbicara tentang systemd. Tapi tentu saja itu tidak adil (dan juga systemd atau tidak tidak berarti Anda salah) dan saya biasanya tidak memilih hal-hal seperti itu karena bagi saya tampaknya tidak pernah menjadi cara yang tepat untuk bersikap konstruktif. Namun itu adalah tulisan yang bagus jadi meskipun melihat referensi ke Lennart saya telah memilih jawaban ini. Jika tidak ada yang lain, Anda berusaha dan harus dipuji. Saya telah membaca secara singkat tentang sampah stateless dan itu adalah sesuatu yang agak ... Saya bahkan tidak yakin apa yang dilakukannya sehingga saya hanya akan membiarkannya begitu saja.
Pryftan
13

Secara historis, partisi swap ditentukan /etc/fstabdengan entri tipe swap. Saat boot, proses startup akan membaca file itu dan mendorong konfigurasi itu ke dalam kernel.

Contoh entri /etc/fstabadalah:

/dev/sdb    none    swap     sw      0  0

Saya tidak terbiasa dengan cara systemdmengelola swap, tetapi saya percaya bahwa hasil akhirnya sama: proses userspace mengetahui ruang apa yang dialokasikan untuk swap, dan proses userspace menginformasikan kernel.

Andy Dalton
sumber
Penanya bertanya tentang Linux, dan ini tidak salah untuk Linux; tetapi ini khas Linux. Sistem operasi lain, seperti FreeBSD misalnya, mengenali catatan swap /etc/fstabdari swtipe mount mereka dan bukan dari swaptipe VFS mereka .
JdeBP
1
Jawabannya tidak membahas semua bagian dari pertanyaan.
Sergiy Kolodyazhnyy
Saya juga harus menunjukkan bahwa jawaban ini juga sudah ketinggalan zaman dalam dunia sistem operasi systemd. Gagal memperhitungkan systemd-gpt-auto-generator.
JdeBP
2
Apa maksudmu systemd tidak menggunakan fstab? Tentu saja!
psusi
1
@psusi: systemd mengerti, tetapi tidak memerlukan fstab.
MSalters
4

Semua jawaban lain menyebutkan cara menunjuk ke swap filesystem saat boot.

Namun, beberapa poin untuk ditambahkan ke jawaban lain:

  • ruang swap juga bisa berupa file;
  • partisi ruang swap ditandai biasanya sebagai tipe 0x82;
  • Anda dapat memasang ruang swap di titik mana pun dalam waktu berjalan;
  • untuk menandai / menginisialisasi partisi / file, agar dapat dikenali dan digunakan / dipasang kemudian sebagai ruang swap, Anda perlu menggunakan perintah mkswap;
  • untuk mengaktifkan / menggunakan partisi swap / file dengan tangan Anda menggunakan perintah swapon;
  • juga untuk menukarnya, Anda pergi dengan swapoff.
Rui F Ribeiro
sumber