Tôi có thể sao chép các tệp lớn nhanh hơn mà không cần sử dụng bộ đệm tệp không?


19

Sau khi thêm preloadgói, các ứng dụng của tôi dường như tăng tốc nhưng nếu tôi sao chép một tệp lớn, bộ đệm tệp sẽ tăng hơn gấp đôi kích thước của tệp.

Bằng cách chuyển một tệp hình ảnh hoặc video hộp ảo 3-4 GB duy nhất sang ổ đĩa ngoài, bộ nhớ cache khổng lồ này dường như loại bỏ tất cả các ứng dụng được tải sẵn khỏi bộ nhớ, dẫn đến tăng thời gian tải và giảm hiệu suất chung.

Có cách nào để sao chép các tệp lớn, nhiều gigabyte mà không lưu vào bộ đệm chúng (tức là bỏ qua bộ đệm của tệp) không? Hoặc một cách để danh sách trắng hoặc danh sách đen các thư mục cụ thể khỏi bị lưu trữ?

Câu trả lời:


19

nocachetiện ích, có thể được thêm vào một lệnh như ionicenice. Nó hoạt động bằng cách gia tải một thư viện mà thêm posix_fadvisevới POSIX_FADV_DONTNEEDlá cờ để mở bất kỳ cuộc gọi.

Nói một cách đơn giản, nó khuyên nhân rằng bộ đệm không cần thiết cho tệp cụ thể đó; hạt nhân sau đó sẽ bình thường không cache file. Xem ở đây để biết chi tiết kỹ thuật.

Nó thực sự tuyệt vời đối với bất kỳ công việc sao chép khổng lồ nào, ví dụ nếu bạn muốn sao lưu một đĩa nhiều terabyte trong nền với tác động ít nhất có thể đến hệ thống đang chạy của bạn, bạn có thể làm gì đó cùng nice -n19 ionice -c3 nocache cp -a /vol /vol2.

Một gói sẽ có sẵn trong Ubuntu 13.10 trở lên. Nếu bạn đang ở phiên bản trước, bạn có thể cài đặt gói 13.10 hoặc chọn cho backport 12.04 này bởi François Marier.


Tôi đã hy vọng điều gì đó có thể được thực hiện thông qua GUI, cũng như một cách đơn giản là đưa vào danh sách đen các thư mục 'không có bộ đệm', nhưng điều này sẽ phải làm ngay bây giờ.
Veazer

12

Đối với các tệp lớn, sử dụng ddvới I / O trực tiếp để bỏ qua bộ đệm của tệp:

Nếu bạn muốn chuyển một (hoặc một vài) tệp lớn nhiều gigabyte, thật dễ dàng thực hiện với dd:

dd if=/path/to/source of=/path/to/destination bs=4M iflag=direct oflag=direct
  • Các directcờ báo ddsử dụng tùy chọn I / O trực tiếp của kernel ( O_DIRECT) trong khi đọc và ghi, do đó bỏ qua hoàn toàn bộ đệm của tệp.
  • Các bstùy chọn kích cỡ khối phải được đặt một giá trị hợp lý lớn từ để giảm thiểu số lượng các hoạt động đĩa vật lý ddphải thực hiện, kể từ lần đọc / ghi không còn lưu trữ và quá nhiều hoạt động trực tiếp nhỏ có thể dẫn đến một sự suy giảm nghiêm trọng.
    • Hãy thử nghiệm với các giá trị từ 1 đến 32 MB; cài đặt ở trên là 4 MB ( 4M).

Đối với các bản sao thư mục nhiều / đệ quy , thật không may, không có công cụ dễ dàng có sẵn; thông thường cp, vv không hỗ trợ I / O trực tiếp.

/ e iflags & oflags đã thay đổi thành iflag & oflag chính xác


1
Đệ quy có thể được thực hiện với zsh's **điều hành. zshcần phải được cài đặt bằng tay từ repos.
Phục hồi Monica - -

1
Thật ra, không. ddCú pháp kỳ lạ làm hỏng ** oprtator. Bạn vẫn có thể sử dụng một kịch bản shell mà có lý lẽ thông thường ( dd.sh in.file out.filevới ** trong tên tập tin) và đưa các tên tập tin để ddsử dụng $1, $2, vv, mà không nên phạm lỗi cú pháp lạ dd của.
Phục hồi Monica - ζ--

1
Việc thực hiện trực tiếp rất chậm, vì AFAIK cũng vô hiệu hóa bộ nhớ đọc, có lẽ không phải là điều bạn muốn và cũng không thực tế trong kịch bản điểm chuẩn. Thay vào đó, hãy sử dụng "iflag = nocache oflag = nocache", điều này nói chính xác với HĐH rằng bạn không cần tệp trong tệp hoặc bộ đệm ngoài.
stolsvik

1

Bạn có thể sao chép một thư mục đệ quy bằng ddcách sử dụng findmkdir

Chúng ta cần giải quyết hai vấn đề:

  1. dd không biết phải làm gì với các thư mục
  2. dd chỉ có thể sao chép một tệp tại một thời điểm

Trước tiên hãy xác định thư mục đầu vào và đầu ra:

SOURCE="/media/source-dir"
TARGET="/media/target-dir"

Bây giờ chúng ta hãy cdvào thư mục nguồn vì vậy findsẽ báo cáo các thư mục tương đối mà chúng ta có thể dễ dàng thao tác:

cd "$SOURCE"

Nhân đôi cây thư mục từ $SOURCEđến$TARGET

find . -type d -exec mkdir -p "$TARGET{}" \;

File trùng lặp từ $SOURCEđể $TARGETbỏ ghi bộ nhớ cache (nhưng sử dụng bộ nhớ cache đọc!)

find . -type f -exec dd if={} of="$TARGET{}" bs=8M oflag=direct \;

Xin lưu ý rằng điều này sẽ không bảo toàn thời gian sửa đổi tệp, quyền sở hữu và các thuộc tính khác.

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.