write() issue during a low level hdd access


 
Thread Tools Search this Thread
Top Forums Programming write() issue during a low level hdd access
# 8  
Old 02-21-2010
Quote:
Originally Posted by sponnusa
I don't know what causes the write call to pass always! Smilie
Well, you're not doing raw I/O. Really only the kernel can do truly raw I/O, and worrying about write errors is the kernel's job.

If writes don't fail, what about reads? Try reading the data back.
# 9  
Old 02-21-2010
read passes too. It does not return error until the device itself fails.

I just want to catch / count the read / write I/O errors from the program.

With the read atleast i can identify by comparing the data read from the sector to a known pattern of data and if does not match, I can flag the read has failed (round about way!).

yeah. it is not the direct raw i/o, but this is for portability and should work across most of the operating systems.
# 10  
Old 02-21-2010
Quote:
yeah. it is not the direct raw i/o, but this is for portability and should work across most of the operating systems.
Unfortunately, AFAIK, the type of raw i/o that you need to meet your requirements is not available at the user level without writing your own device driver. And device drivers by their very nature are not very portable.
# 11  
Old 02-21-2010
thank you.

So, there is no way around it without writing a device driver to handle the read/write operations? Is that right?

I have a utility written in python which able to identify the bad sectors exactly as the same way as the C program. I am not sure, if python would have implemented anything internally (a device driver) to achieve this. I'm currently downloading the python source code to analyse.

I am sure C is more low level then python (which is btw the dumbest statement, i've said Smilie) and should be able to achieve it. It's little weird that the program fails to identify the bad sectors. I have analysed the following programs so far for such an implementation. And all have the same code.

Testdisk, dd, ddrescue, badblocks etc.,.

So does this conclude that the none of the above available usermode linux opensource programs are really doing what they are claiming for? (data recovery / forensics utilities?) All the above program implements O_DIRECT options too.

Well, I guess I am in need of a fix now! Smilie

It also sounds a little weird that there are no user mode programs (not even one?) available in linux that can do a direct I/O with the disk. (Except that I am willing to write one using the libata / scsi libraries which can directly talk to the ATA (PATA / SATA) devices using ATA protocol (i've done this in dos using assembly) and SG / SCSI protocol to the scsi devices).

Anyways, thanks for all your input and guidance. Atleast it got me to do the O_DIRECT implementation. Please update this thread if there are any more information to be shared / assisted.

Thanks again for all the help. Smilie
# 12  
Old 02-21-2010
Quote:
Originally Posted by sponnusa
I just want to catch / count the read / write I/O errors from the program.
The crux is that the kernel doesn't do reads when or how you tell it to. It might bundle it with other reads, feed you data from cache, or make you wait until other reads are done. It may have to do a little or a lot of translation between the device and you. This is true for most multitasking operating systems.

Have you tried doing reads?

it may also be using linux's ancient, soon-to-be-removed obsolete and unportable raw system.

---------- Post updated at 05:21 PM ---------- Previous update was at 05:19 PM ----------

Quote:
Originally Posted by sponnusa
So does this conclude that the none of the above available usermode linux opensource programs are really doing what they are claiming for? (data recovery / forensics utilities?) All the above program implements O_DIRECT options too.
Most of data forensics is reading. Writing to an iffy disk is a very silly thing to do.
# 13  
Old 02-21-2010
Quote:
Originally Posted by Corona688
The crux is that the kernel doesn't do reads when or how you tell it to. It might bundle it with other reads, feed you data from cache, or make you wait until other reads are done. It may have to do a little or a lot of translation between the device and you. This is true for most multitasking operating systems.

Have you tried doing reads?

it may also be using linux's ancient, soon-to-be-removed obsolete and unportable raw system.
Yes. I have tried the read call. It does not return a failure for the read operation on bad sectors.

It returns success. It says it had read the amount of data I request for.

The only way I can identify the error is when I try to compare / analyse the read data with the known pattern.

Thank you.
# 14  
Old 02-21-2010
Another problem is that a failed read can take forever and a day. Most drive access is asynchronous, meaning the drive returns data whenever it feels like it, and can grind for minutes when it hits a sector it doesn't like.

Try getting rid of the cache for that disk with the posix_fadvise function. It might just be returning cache, even with O_DIRECT.
Login or Register to Ask a Question

Previous Thread | Next Thread

7 More Discussions You Might Find Interesting

1. Programming

Low level X11 programming

How to use X11 without Xlib not XCB? How draw window directly on low level? I must use anyway window manager like Motif? I have ridden that X11 has server-client architecture, client send via TCP/IP to port 6000 request for primitives and get replies. Where is detailed description of it? In X11... (0 Replies)
Discussion started by: AndrzejB
0 Replies

2. Programming

Why is C/C++ considered low-level languages???

Hi friends, I hope everyone is doing well and fine. I have always been hearing that C/C++ are relatively low-level as compared to Java/C# etc. Could you please tell me some low-level qualities of C/C++? And I think disk deframenters are written in C/C++, please correct me if I am wrong. And please... (5 Replies)
Discussion started by: gabam
5 Replies

3. Programming

System calls and C language low-level qualities???

Hi friends, I hope everyone is fine and doing well. I queried in my previous thread about the low-level qualities of C/C++ languages.I really thank you people for explaining, it was really helpful. One more ambiquity that I have in my mind is regarding the unix system calls like open, creat,... (1 Reply)
Discussion started by: gabam
1 Replies

4. AIX

High Runqueue (R) LOW CPU LOW I/O Low Network Low memory usage

Hello All I have a system running AIX 61 shared uncapped partition (with 11 physical processors, 24 Virtual 72GB of Memory) . The output from NMON, vmstat show a high run queue (60+) for continous periods of time intervals, but NO paging, relatively low I/o (6000) , CPU % is 40, Low network.... (9 Replies)
Discussion started by: IL-Malti
9 Replies

5. IP Networking

Best reference for understanding low level info on nic cards drivers and functionality

Hi, What is the best reference that gives in detail on nic cards configuration , assigning multiple ip addresses to a single interface, netlink library etc and all basic stuff at this level..? Thanks (2 Replies)
Discussion started by: Gopi Krishna P
2 Replies

6. HP-UX

Access to a second HDD

Hello How to access to a second hard disk on a HP-UX system? Thanks (3 Replies)
Discussion started by: ouniss
3 Replies

7. UNIX for Dummies Questions & Answers

Low level format?

I want to do a low level format like in windows (C:\format c:) but I don't know how it works in unix or linux.. Can somebody help me ? thnx :) (3 Replies)
Discussion started by: day
3 Replies
Login or Register to Ask a Question