2012-04-09 25 views
6

Tôi muốn lưu trữ một số dữ liệu trên đĩa trong linux. Tôi muốn dữ liệu này được lưu trữ trong khối đĩa liên tục trong đĩa vật lý. Nếu tôi để ghi dữ liệu này vào một tập tin bình thường, có lẽ khối mà tập tin chiếm không liên tục trong đĩa vật lý. Có cách nào để thực hiện công việc này không?cách lưu trữ tệp trong khối đĩa liên tục trong linux

+2

Tại sao? Những gì bạn đang cố gắng đạt được? – Hasturkun

Trả lời

7

Phân vùng đĩa là vùng liên tục của đĩa.

Vì vậy, có một cách để làm những gì bạn muốn làm là thay đổi kích thước phân vùng đĩa của bạn và tạo một hình mới với GParted (gnome) hoặc partitionmanager (kde) hoặc tương tự - một kích thước phù hợp cho tập tin của bạn.

Sau đó bạn có thể viết trực tiếp cho phân vùng mới của bạn (không sử dụng và bỏ qua một hệ thống tập tin) bằng cách sử dụng các file:

/dev/sdxn 

đâu sdxn = {sda1, sda2, ..., sdb1, ... ...} vv là chữ cái/số của phân vùng.

Hoặc bạn có thể dành toàn bộ một đĩa bằng cách viết trực tiếp đến nó (bỏ qua bảng phân vùng alltogether) bằng cách sử dụng file:

/dev/sdx 

đâu SDX = {sda, sdb, sdc, ...}, vv là thư của đĩa.

Cảnh báo: Không thực hiện lỗi đánh máy và ghi sai chính tả (có hệ thống tệp trên đó) hoặc bạn sẽ làm hỏng nó. Tốt nhất để tạo liên kết tượng trưng ln -s/dev/sdxn/home/fred/mydata, và sau đó luôn ghi vào tệp mydata.

3

Mã hệ thống tệp (bên trong hạt nhân, ví dụ: trong linux-3.1.6/fs/ext4/ đối với hệ thống tệp ext4 bên trong nguồn kernel linux-3.1.6) đang quản lý các khối đĩa được sử dụng cho tệp nhất định. Vì vậy, bạn không thể tự tổ chức các khối đĩa của một số tệp của mình. Tuy nhiên, bạn có thể đưa ra một số gợi ý cho hạt nhân bằng cách sử dụng một số cuộc gọi hệ thống lạ.

Nếu bạn không thích điều đó, bạn có thể tránh toàn bộ hệ thống tệp bằng cách ghi trực tiếp vào phân vùng chưa được gắn kết, ví dụ: bằng cách thực hiện các tòa nhà chọc trời write(2) đến một bộ mô tả tệp được lấy bởi open(2) -ing ví dụ /dev/sda2; nhưng trừ khi bạn thực sự biết những gì bạn đang làm (và xây dựng câu hỏi của bạn làm cho tôi cảm thấy bạn không hiểu vai trò chính xác của hệ thống tập tin), tôi sẽ không khuyên bạn nên làm điều đó.

Mã hệ thống tệp hạt nhân khá tốt và bộ đệm hệ thống tệp hạt nhân rất hiệu quả.

Nếu bạn muốn tăng tốc số lần đọc của mình, hãy xem xét có thể sử dụng các cuộc gọi hệ thống readahead(2) hoặc fadvise(2) hoặc madvise(2) hệ thống.

Bạn cũng có thể, khi tạo hệ thống tệp, hãy tinh chỉnh nó cho các mục đích cụ thể của bạn. Ví dụ: nếu bạn biết bạn có các tệp khá lớn trong đó, bạn có thể sử dụng kích thước khối lớn hơn tiêu chuẩn (ví dụ: mke2fs -b 8192), v.v.

Nhưng đừng nghĩ rằng các thủ thuật phần mềm sẽ tăng tốc tăng đáng kể ứng dụng của bạn; nếu bạn làm rất nhiều đĩa IO, nút cổ chai thực sự là phần cứng (do đó, sử dụng SSD thay vì đĩa cứng có thể dễ dàng hơn).

+0

Nó chỉ ra rằng EXT4 có kích thước tối đa là 128MiB, vì vậy các tệp lớn hơn này không thể tiếp giáp trên EXT4. Những gợi ý bạn đề cập đến - có bất kỳ hệ thống "lạ" như vậy gọi để gợi ý cho hạt nhân trên viết? Hoặc có thể phân bổ một tập tin tiếp giáp của số không mà sau đó có thể được ghi vào. Tôi đang [tìm cách làm điều này] (http://unix.stackexchange.com/questions/80072/contiguous-copy-how-do-i-copy-files-contiguously) trên FAT32 cho các tệp ISO LiveCD (thường ~ 700MiB), và tốt nhất là trên hệ thống tập tin '* nix'. –

3

Bạn không thể yêu cầu hệ thống tệp thông thường.

Nếu vì lý do nào đó, bạn thực sự muốn lưu trữ dữ liệu liền kề trên đĩa, bạn cần sử dụng thiết bị thô (miễn phí) và tự quản lý bố cục dữ liệu trên đó. Đây là những gì một số cơ sở dữ liệu đang làm. Lưu ý rằng ngay cả trong trường hợp đó, không có sự đảm bảo cho các khối được tiếp giáp. Thiết bị này có thể được cung cấp bởi lớp RAID phần cứng hoặc phần mềm hoặc là một zvol từ một nhóm ZFS.

Các vấn đề liên quan