Đây là cách viết rất nhanh và hiệu quả để viết chuỗi 64 kB 0xFF, sử dụng awk
, tiêu thụ <8% CPU và chỉ bị giới hạn bởi tốc độ của ổ đĩa bạn đang ghi.
Tôi đã thử sử dụng tr
như được đề xuất ở đây và thấy nó rất chậm và tiêu tốn rất nhiều CPU dịch từng Byte. Phương pháp của tôi hoạt động trong các khối 64 kB và nhanh hơn ít nhất 3,5 lần so với dựa trên một ký tự tr
(26 MB / s so với 7 MB / s trên PATA hw cũ - hoàn thành trong 52 phút trong im lặng so với hơn 3 giờ với vòng quay quạt làm mát lớn ...). Tôi thích khi mọi người gạt bỏ kiến thức khoa học máy tính cơ bản mà không kiểm tra ý kiến của họ trước.
Tôi khuyên bạn nên xây dựng tập lệnh sau bằng cách sử dụng printf
từ trình bao thay vì cố gắng ghi tập lệnh này vi
vì hầu hết các đĩa CD-ROM khởi động sẽ không cung cấp cho bạn đủ không gian tmp để nhật ký bộ đệm sao chép và dán 65.536 lần ...
1) Soạn kịch bản
$ printf "echo | awk '{\n\twhile (1) {\n\t\tprintf(\"%%s\", \"" >/tmp/writeones.sh
$ for i in `seq 1 65536`; do printf '\377' >>/tmp/writeones.sh; done
$ printf "\");\n}\n}'\n" >>/tmp/writeones.sh
tập lệnh đầu ra có vẻ như: (Bỏ qua một số ký tự 0xff trong chuỗi)
echo | awk '{
while (1) {
printf("%s", "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ...");
}
}'
2) Kiểm tra tập lệnh:
$ sh /tmp/writeones.sh | od -Ax -tx1
000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
Ctrl+C
3) Chạy tập lệnh và đường ống vào ổ đĩa của bạn bằng dd (kiểm tra kỹ xem bạn có đúng ổ đĩa không !!!):
# sh /tmp/writeones.sh | dd of=/dev/ada0 bs=65536 &
Tại sao tôi chọn 64 kB? 1. Giới hạn danh sách đối số của AWK và 2. đối với phần cứng của tôi, điều này đạt được tốc độ tốt nhất cho tôi. Tôi cũng đã thử viết cái này chỉ trong shell bằng printf và thấy nó chậm hơn 40% và tiêu tốn 80% CPU vì tất cả các dĩa.