locate holes in a sparse file.


 
Thread Tools Search this Thread
Top Forums Programming locate holes in a sparse file.
# 8  
Old 05-17-2009
I want to efficiently read parts of a file, in the case of sparse files, i'd like to detect what is sparse beforehand and not read those parts. Is there a way to do this? i imagine this will be quite filesystem dependant, but in most cases, this would be a considerable win in startup time.
# 9  
Old 05-17-2009
Call stat() on the file - then: if st_blocks * st_blocksize != st_size the file has holes
# 10  
Old 05-17-2009
i don't really want to know if the file has holes, but where EXACTLY the holes are located.

suppose i have a sparse file of about 1.5GB, in reality it's disk usage is about 300MB, i need to read the file, but for each read, i need to do a bunch of stuff, which i don't have to do, if it's sparse, in all actuality, i don't even have to read it, if it's sparse. thus:

lets say i have a function that's called that has to read from a certain offset a certain size. if part is sparse, i'd like only to read the non-sparse part.

if the whole part of it is sparse, i'd like to skip the whole read function.

thus: i have an offset and size and need to find out (without reading) if it's sparse and (possibly even which part of it is sparse).

is this possible?

any ideas?
# 11  
Old 05-17-2009
The only way to find a hole is to read until you hit ascii nul characters. There is no system call that says 'here is a hole in this file'. Unix files without special helper libraries (ISAM for example) are purely sequential access - meaning there is no metadata to say what is in the next logical record. You have to read it to find out.

Plus, if the file is a sparse file that has the blocksize mismatch thing I mentioned earlier, it means the 'holes' are not on disk, so there is no disk I/O overhead to read thru a hole.
You have to read using fread() or read() and read a block at a time - probably not fgets().
# 12  
Old 05-17-2009
hmm, so there is no specialized way? syscalls, ext3 libraries to get that information?
# 13  
Old 05-17-2009
No - none.
# 14  
Old 05-17-2009
What application is creating so many sparse files that you need this kind of thing?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Locate the column names with their values in the file and the printing the same in the other file

I have text file in Linux with two rows : first row conmtain the column nam and the second row contain its value .I nned to fetch few columns first and then redirect the data of those colum in the another file. Any ideas?? (1 Reply)
Discussion started by: Anamica
1 Replies

2. Programming

C Data Structure to represent a Sparse Array

Which data structure will be most appropriate to represent a sparse array? (1 Reply)
Discussion started by: rupeshkp728
1 Replies

3. Shell Programming and Scripting

using find but avoiding sparse files

I am no Unix administrator...I live in windows land. I wrote a script to find files of certain names and process them but was later advised to avoid checking sparse files since it would use up a lot of resources and the files I was looking for were not there. How do I avoid doing the find on... (3 Replies)
Discussion started by: shellFun
3 Replies

4. Shell Programming and Scripting

Convert a matrix to sparse representation

Hi All, I have a matrix stored in a file matrix.mtx and looks like this: 1 0.5 0.33 0.25 0 0.33 0.25 0.2 0 0 0 0.16 0 0 0 0.14 I want to convert this matrix to its sparse representation like the one give below (sparse_matrix.mtx). This means that above matrix has been converted to its... (1 Reply)
Discussion started by: shoaibjameel123
1 Replies

5. Shell Programming and Scripting

File creating in another path.. application unable to locate

I am submitting a concurrent program (of HOST tyme) from Oracle apps screen, The MAIN shell program submits another program, (child) which is also a Shell program. The child writes data to log file. Now the main program, read the log and do some calculations and sends the data to user through... (1 Reply)
Discussion started by: Pradeep Garine
1 Replies

6. UNIX for Advanced & Expert Users

Locate text in file then remove and replace

I'm trying to locate a block of text in a file, remove it and then replace with a new block. I can find the first line number that the text starts on using grep -n. I then need to locate the ending line by searching for the string "}" that follows the line I found. Here's the steps I need to... (1 Reply)
Discussion started by: lchandle
1 Replies

7. Shell Programming and Scripting

Locate file and path

Hi, I am writing a script to manage my server a bit better, but want to make it so if a path changes I dont need to update the script. I was thinking of doing something like if then echo -e "psa/admin/sbin located " else echo "no luck chump" fi but would need to... (2 Replies)
Discussion started by: foz
2 Replies

8. UNIX for Dummies Questions & Answers

URGENT! How to copy with holes?

I need to write a program that reads in data from a file with holes and copy the file. the cp command copies the file but the holes use disk blocks then; but when this progrm copies the file the new file should not have hose extra blocks. the file should be copied with holes. PLZZ help! (2 Replies)
Discussion started by: kominbhai
2 Replies

9. Shell Programming and Scripting

How to copy file and locate in new folder?

Hi All, Please advise me how to make a copy of file from a list and store in one particular location? For example , I have aaa.txt which contains as below, But, those *usg files might be randomly store in different location.... > cat aaa.txt adc.usg dfdjkf.usg ugjfk.usg And I want... (3 Replies)
Discussion started by: cedrichiu
3 Replies

10. UNIX for Advanced & Expert Users

sparse files

what are sparse files? (2 Replies)
Discussion started by: areef4u
2 Replies
Login or Register to Ask a Question