Tạo một tập tin giả mạo lớn tùy ý


16

Tôi muốn tạo một tệp đặc biệt tương tự /dev/nullhoặc /dev/randomtrong đó tệp không thực sự tồn tại nhưng bạn có thể đọc từ đó giống nhau, ngoại trừ việc tôi thực sự có thể đặt giới hạn về kích thước rõ ràng của tệp.

Nói cách khác, tôi muốn tạo một tệp đặc biệt trong đó (giả sử tôi đặt giới hạn ở mức 500 GB) khi tôi "cat" tệp, nó sẽ xuất ra tất cả 500 GB tệp rồi dừng. Nó cần hoạt động giống như một tệp 500 GB thực tế, nhưng không chiếm dung lượng. Nội dung của tệp này không quan trọng, nó có thể \0giống như tất cả /dev/null, hoặc chỉ là một chuỗi nhỏ được gửi đi gửi lại, hoặc bất cứ điều gì.

Đây có phải là một cái gì đó có thể làm được? Điều duy nhất gần gũi mà tôi có thể tìm thấy là những trang người đàn ông nói về mknod, nhưng những thứ đó không hữu ích lắm.

Câu trả lời:


17

Bạn có thể tạo một tệp thưa thớt trên một số hệ thống tệp nhất định, có vẻ như có kích thước nhất định, nhưng thực tế sẽ không sử dụng nhiều dung lượng đó trên đĩa .

$ dd if=/dev/null of=sparse bs=1024 count=1 seek=524288000
0+0 records in
0+0 records out
0 bytes (0 B) copied, 2.4444e-05 s, 0.0 kB/s
$ ls -l sparse 
-rw-rw-r--. 1 ignacio ignacio 536870912000 May  9 22:25 sparse
$ du -h sparse
0   sparse

Điều này hoạt động hoàn hảo. Trường hợp tốt nhất tôi đã hy vọng cho một giải pháp trong đó tôi thực sự có thể tìm ra kịch bản đầu ra là gì (như, đối với mọi vị trí tìm kiếm bạn nhìn vào dữ liệu sẽ có một hàm băm của vị trí đó hoặc một cái gì đó dọc theo các dòng đó), nhưng điều đó khá rõ ở đó Điều này chắc chắn hoạt động cho bây giờ, cảm ơn!
tầm thường

1
@MediocreGopher, bạn chắc chắn có thể làm điều gì đó tương tự với FUSE .
cjm

1

Ngoài giải pháp dựa trên dd / tìm kiếm di động đã đề cập, một số Unix có các lệnh chuyên biệt:

Ít nhất là trên Solaris , MacOS / XIrix :

mkfile -n 500m sparseFile

Trên prealloc HP-UX , trên AIX lmktemp. và nhiều bản phân phối Linux đã cắt ngắn


1

Nếu bạn không cần tìm kiếm lại trong tệp, bạn có thể sử dụng một đường ống có tên:

mkfifo my_special_file
yes | head -n 100 > my_special_file&
cat my_special_file

Tất nhiên, bạn có thể sử dụng bất kỳ lệnh nào khác, bao gồm một tập lệnh phức tạp, để tạo dữ liệu trong đường ống.


0

Chà, với dd, bạn có thể chỉ định kích thước khối và số đếm, và do đó giới hạn kích thước như thế này:

dd if=/dev/urandom count=5 bs=1024 > nullfile

Nếu bạn muốn đọc từ nó, chỉ cần đặt nó:

dd if=/dev/urandom count=5 bs=1024 | yourReadingProcess 

Trước đây, mọi cài đặt linux tôi thực hiện đều đi kèm với một số công cụ mạng, portmap, inet.d và như vậy, và trong inet.d, ở đó một số dịch vụ luôn được chỉ định, một trong số chúng được mô tả / đặt tên là Chargeen, nếu tôi nhớ chính xác.

(... Một phút sau ...)

Đúng. Trong / etc / services, bạn tìm thấy

chargen         19/tcp          ttytst source
chargen         19/udp          ttytst source

Vì vậy, tôi đoán rằng đây là một dịch vụ để kiểm tra một cái gì đó và gửi ký tự - có thể là ngẫu nhiên - qua mạng. Tôi chỉ tìm thấy /etc/xinet.d/chargeen trên PC của mình. Có nhiều thông tin hơn:

# default: off
# description: An xinetd internal service which generate characters.  The
# xinetd internal service which continuously generates characters until the
# connection is dropped.  The characters look something like this:
# !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg
# This is the tcp version.

Tuy nhiên, tôi không biết làm thế nào để sử dụng nó cho mục đích của bạn.

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.