Làm thế nào để trình cài đặt tính toán kích thước của phân vùng trao đổi để tạo ra? Có lẽ nó dựa trên kích thước RAM được cài đặt, nhưng điều đó phụ thuộc vào dung lượng RAM?
Làm thế nào để trình cài đặt tính toán kích thước của phân vùng trao đổi để tạo ra? Có lẽ nó dựa trên kích thước RAM được cài đặt, nhưng điều đó phụ thuộc vào dung lượng RAM?
Câu trả lời:
Trên thực tế không có dphys-swapfile
chương trình trên CD cài đặt Ubuntu mặc định và nó không được sử dụng để tính kích thước trao đổi .
Điều xảy ra là trình ubiquity
cài đặt sử dụng các partman-auto
tập lệnh và tệp cấu hình (được gọi là công thức nấu ăn ) để xác định kích thước của tất cả các phân vùng. Nó hoạt động như thế này:
/proc/meminfo
).Chi tiết:
Một tập tin công thức có thể trông như thế này:
1 1 1 free
$iflabel{ gpt }
method{ biosgrub } .
500 10000 -1 $default_filesystem
$lvmok{ }
method{ format }
format{ }
mountpoint{ / } .
96 512 300% linux-swap
$lvmok{ }
method{ swap }
format{ } .
Thuật toán để tính toán kích thước:
for(i=1;i<=N;i++) {
factor[i] = priority[i] - min[i];
}
ready = FALSE;
while (! ready) {
minsum = min[1] + min[2] + ... + min[N];
factsum = factor[1] + factor[2] + ... + factor[N];
ready = TRUE;
for(i=1;i<=N;i++) {
x = min[i] + (free_space - minsum) * factor[i] / factsum;
if (x > max[i])
x = max[i];
if (x != min[i]) {
ready = FALSE;
min[i] = x;
}
}
}
Để xem thêm:
Điều này sẽ khá kỹ thuật nhưng rất vui khi tìm hiểu vì vậy hãy đến đây ...
dphys-swapfile
và đây là mã nguồn . Tùy chọn setup
được sử dụng để thiết lập nó:thiết lập - báo cho dphys-exchangefile tính toán kích thước tệp hoán đổi tối ưu và (re-) tạo ra một tập tin hoán đổi phù hợp. Mặc định nó có kích thước 2 lần RAM. Điều này có thể được gọi vào lúc khởi động, vì vậy các tập tin luôn ở lại đúng kích thước cho RAM hiện tại hoặc chạy bằng tay bất cứ khi nào kích thước RAM có đã thay đổi
dphys-swapfile
là cài đặt conf_swapsize
cho kích thước được xác định trước (trong Natty, đây là sản phẩm trống):kích thước chúng tôi muốn buộc nó là, mặc định (trống) cung cấp RAM 2 * CONF_SWAPSIZE =
và một thiết lập cho swapfactor
...
this is what we want, 2 times RAM size
SWAPFACTOR=2
Kích thước thực tế được tính thêm một chút về:
if ["$ {CONF_SWAPSIZE}" = ""]; sau đó # tính kích thước tối ưu tự động echo -n "kích thước điện toán" # đây có vẻ là kích thước RAM vật lý gần nhất, thiếu khoảng 60k KCORESIZE = "` ls -l / Proc / kcore | awk '{in $ 5}' `" # tạo MByte được làm tròn xuống sẽ chính xác là 1 quá ít, vì vậy hãy thêm 1 MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1` " # mặc định, không ghi đè tập tin cấu hình, trao đổi = 2 * RAM CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '*' "$ {SWAPFACTOR}" `" fi
Như bạn có thể thấy cách họ tính toán nó trong gói này phụ thuộc vào kích thước /proc/kcore
, sau đó được chia cho 1048576, +1 để làm tròn nó và sau đó được nhân với hoán đổi. Từ máy của tôi:
Vì vậy, mặc định cho hệ thống này sẽ là 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MBytes.