Swapon thất bại: Đối số không hợp lệ trên hệ thống Linux với hệ thống tệp Btrfs


16

Có gì sai với trình tự hoạt động này, chạy trên hệ thống Debian Squeeze với hệ thống tệp Btrfs?

$ dd if=/dev/zero of=swapfile2 bs=1024 count=524288
$ sudo mkswap swapfile2
$ sudo chown root:root swapfile2
$ sudo chmod 0600 swapfile2  
$ sudo swapon -v -f swapfile2
swapon on swapfile2
swapon: /home/mathieu/swapfile2: found swap signature: version 1, page-size 4, same byte order
swapon: /home/mathieu/swapfile2: pagesize=4096, swapsize=536870912, devsize=536870912
swapon: swapfile2: swapon failed: Invalid argument

Hệ thống tập tin của tôi là:

$ mount
/dev/mapper/voxbox-root on / type btrfs (rw)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/mapper/voxbox-boot on /boot type ext2 (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)

malat, tôi đã mở lại câu hỏi của bạn và thêm câu trả lời của bạn như dưới đây. Vui lòng gửi câu trả lời của bạn, tôi sẽ xóa của tôi.
Sathyajith Bhat

Câu trả lời:


16

Báo cáo lỗi này dẫn đến cuộc thảo luận này

Vì vậy, "Đối số không hợp lệ" nên được đọc là "Hệ thống tệp của bạn không hỗ trợ tệp hoán đổi"

như được đăng bởi malat


6
Bắt tốt đẹp! Hệ btrfsthống tệp không thể hỗ trợ các tệp hoán đổi vì nó di chuyển dữ liệu tệp xung quanh và mã hoán đổi Linux chỉ lấy ánh xạ của tệp hoán đổi một lần. Thảm họa sẽ xảy ra nếu điều này được cho phép - dữ liệu tệp ngẫu nhiên sử dụng các khối mà tệp hoán đổi một khi được sử dụng sẽ bị hỏng.
David Schwartz

1
trang người dùng hoán đổi mới hơn ghi lại một thủ thuật mới "Một cách giải quyết có thể là ánh xạ tệp vào thiết bị loopback". Tôi vẫn chưa thử nó lần nào.
malat

8

Tôi có ít hơn 50 danh tiếng nên tôi không thể bình luận. Nhưng tôi phải cập nhật câu trả lời hiện có. Trong linux kernel 5.0.0, btrfs vốn hỗ trợ hoán đổi ngay bây giờ. (Bạn phải đặt nó là không COW)

Dưới đây là một số thông tin từ kernel.org: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F

Từ kernel 5.0+ btrfs có hỗ trợ tệp hoán đổi riêng, nhưng với một số hạn chế. Tệp hoán đổi - phải được phân bổ đầy đủ dưới dạng NOCOW mà không nén trên một thiết bị.

Liên kết này cho biết cách thực hiện: https://wiki.archlinux.org/index.php/swap#Swap_file .

KHÔNG THỬ NÓ TRONG LINUX <4.21 !!!

Cảnh báo: Btrfs trên Linux kernel trước phiên bản 5.0 không hỗ trợ các tệp hoán đổi. Việc không chú ý đến cảnh báo này có thể dẫn đến tham nhũng hệ thống tệp. Mặc dù tệp hoán đổi có thể được sử dụng trên Btrfs khi được gắn qua thiết bị lặp, điều này sẽ dẫn đến hiệu suất hoán đổi bị suy giảm nghiêm trọng.


1
Bạn có thể trích dẫn phần có liên quan trong liên kết của bạn?
Burgi

@Burgi Tôi đã chỉnh sửa câu trả lời của mình và giờ thì tốt hơn rồi!
recolic

2

Nếu bạn muốn trao đổi trên một tập tin, chỉ cần sử dụng btrfs-exchangeon


Tôi đã đi đến cùng một giải pháp, nhưng tôi lo ngại về tính đúng đắn của cách tiếp cận đó. Ví dụ. với vòng lặp dev tôi mía làm việc xung quanh kiểm tra lỗ được tạo với truncate -s 4G swapfile_holes.img. Tức là lý do tại sao swaponkiểm tra một cái gì đó là hoán đổi nên đáp ứng một số yêu cầu cho hiệu suất hợp lý.
ony

1
Và chỉ một lúc trước, tôi quyết định tránh sử dụng losetupbản đồ. Hệ thống của tôi bị kẹt sau khi bắt đầu sử dụng trao đổi thông qua losetuptrên btrfs (với tệp được phân bổ trước). Có lẽ nó can thiệp bằng cách nào đó với bộ đệm và bộ đệm. Hệ thống tức là muốn giải phóng bộ nhớ và hoán đổi thứ gì đó, nhưng điều này dẫn đến việc tăng bộ đệm cho cùng kích thước. Mặc dù tôi không chắc chắn, tôi sẽ tránh điều đó.
ony

0

Cập nhật tháng 4 năm 2019 : Vui lòng xem câu trả lời của recolic, tuyên bố rằng Btrfs đã bắt đầu hỗ trợ trao đổi kể từ phiên bản kernel 5.0.0 của Linux.

Câu trả lời gốc:

Câu trả lời của Sathya dường như chứa các liên kết chết.

Tôi tìm thấy điều này trong Btrfs FAQ:

Btrfs có hỗ trợ trao đổi tập tin?

Hiện tại không có. Chỉ tạo một tệp NOCOW không có ích, trao đổi hỗ trợ tệp phụ thuộc vào một chức năng mà btrfs cố tình không thực hiện do các lỗi tiềm ẩn. Việc thực hiện hoán đổi được sử dụng để dựa vào một số giả định có thể không có trong btrfs, như số khối trong tệp hoán đổi trong khi btrfs có ánh xạ số khối khác nhau trong trường hợp có nhiều thiết bị. Có một API mới có thể được sử dụng để chuyển đổi sang btrfs; để biết thêm chi tiết, hãy xem ý tưởng dự án # Hỗ trợ tệp hoán đổi.

Một cách giải quyết, mặc dù có hiệu suất kém, là gắn tệp hoán đổi qua thiết bị lặp.

Nguồn: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F


Câu hỏi thường gặp cũng nói rằng trao đổi trên Btrfs được hỗ trợ kể từ nhân Linux 5.0
phuclv

@phuclv: Yay, tiến bộ!
mpb

-2

Invalid argumentnói rằng có gì đó không đúng trong các đối số cho swaponlệnh.

Trước hết, đọc man swapon.

Hãy thử sudo swapon swapfile2. Trong trường hợp của tôi, nó hoạt động.


5
Bạn có thể nghĩ, tôi có thể tìm thấy cờ -v và -f mà không cần đọc trang man không?
malat
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.