2015-03-10 15 views
5

Tôi có một đĩa SATA cứng với ghi bộ nhớ cache bị vô hiệu hóa:Fsync (fd) có hoạt động trên một tệp được chương trình bên ngoài tạo không?

hdparm -W0 /dev/foo 

Tôi đang hoạt động trên một phân vùng ext4 với các tùy chọn (giữa những người khác) gắn kết:

data=ordered 
auto_da_alloc 

phiên bản kernel Linux là 2.6.32-5-686.

Bây giờ, tôi có một chương trình bên ngoài mà tôi không thể thay đổi, nhưng mà tôi biết tạo ra một tập tin theo cách sau:

int fd = open(path); 
write(fd, data, data_size); 
close(fd); 

Tức là nó không fsync trước khi đóng. Vì vậy, tại thời điểm này, các dữ liệu có thể có trong RAM, một nơi nào đó trong kernel/fs cache.

Lưu ý: siêu dữ liệu chưa được quan tâm: siêu dữ liệu cuối cùng sẽ được viết và fsynced sau Tôi đã đảm bảo dữ liệu đã đạt đến đĩa cứng. Bản thân dữ liệu là mối quan tâm.

Vì vậy, câu hỏi đặt ra là, làm cách nào để tôi có thể giúp dữ liệu tiếp cận với đĩa cứng thực tế?

Tôi đã nghĩ đến việc chạy chương trình riêng biệt này sau đó:

int fd = open(path); 
fsync(fd); 
close(fd); 

rằng sẽ giúp xóa sạch các dữ liệu, hay tôi nên sử dụng một cách tiếp cận khác nhau?

Trả lời

1

sẽ giúp đỡ mà tuôn ra dữ liệu,

Có nó sẽ, nó không quan trọng ai làm các fsync.

Lưu ý rằng bạn có khả năng muốn đồng bộ hóa thư mục mà tệp nằm trong đó để đồng bộ hóa siêu dữ liệu của tệp.

0

Từ man fsync:

Calling fsync() does not necessarily ensure that the entry in the 
directory containing the file has also reached disk. For that an 
explicit fsync() on a file descriptor for the directory is also 
needed. 
Các vấn đề liên quan