By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
454,522 Members | 1,739 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 454,522 IT Pros & Developers. It's quick & easy.

trying to read from dying disk

P: n/a
I have a python file that is trying to read raw data from a raw
partition on a dying dist, eg

f = file('/dev/sda')
f.seek(SOMEWHERE)
s = f.read(SOMEBYTES)

On some blocks, the read succeeds, on others it fails and an IOError is
thrown, and on others it appears to hang indefinitely and will not
respond to any attempt to kill it with 'kill -9 PID', etc.

Is there anyway to do a timeout read on this kind of file, or even to
kill the process once it hangs?

linux kernel 2.6.10
python 2.4.1

Thanks!
JDH

Jul 19 '05 #1
Share this Question
Share on Google+
5 Replies


P: n/a
jd*****@gmail.com writes:
I have a python file that is trying to read raw data from a raw
partition on a dying dist, eg [...] On some blocks, the read succeeds, on others it fails and an IOError is
thrown, and on others it appears to hang indefinitely and will not
respond to any attempt to kill it with 'kill -9 PID', etc.

Is there anyway to do a timeout read on this kind of file, or even to
kill the process once it hangs?

linux kernel 2.6.10
python 2.4.1


This sounds like a linux kernel question much more than a Python one.
Try a linux programmers' list?
John
Jul 19 '05 #2

P: n/a
> This sounds like a linux kernel question much more than a Python
one. Try a linux programmers' list?


Except that I'm writing a *python* program and trying to do a timeout
on the python *file* read operation. If I asked the question on the
kernel mailing list, they would rightlyfully assume I suspect that I
should be writing a C program, and then they would suggest c.l.py.

I'm currently attempting something with

http://www.python.org/doc/current/lib/node368.html

but it seems the read operation is ignoring these signals just as it is
ignoring my signals from the kill command -- perhaps unsurprisingly.

Perhaps there is no hope.
JDH

Jul 19 '05 #3

P: n/a
jd*****@gmail.com wrote:
Except that I'm writing a *python* program and trying to do a timeout
on the python *file* read operation.
and that *python* program is using the *C* runtime library, which calls
the *kernel* to do the work.
If I asked the question on the kernel mailing list, they would rightly-
fully assume I suspect that I should be writing a C program, and then
they would suggest c.l.py.


if you asked the question in an intelligent way, they would probably explain
what mechanisms the kernel provides for this purpose, and give you the
hints you need to solve this. in general, Python and C has no control what-
soever over what the operating system kernel does when reading data from
a disk. surely you know that?

</F>

Jul 19 '05 #4

P: n/a
jd*****@gmail.com writes:
I have a python file that is trying to read raw data from a raw
partition on a dying dist, eg

f = file('/dev/sda')
f.seek(SOMEWHERE)
s = f.read(SOMEBYTES)

On some blocks, the read succeeds, on others it fails and an IOError is
thrown, and on others it appears to hang indefinitely and will not
respond to any attempt to kill it with 'kill -9 PID', etc.

Is there anyway to do a timeout read on this kind of file, or even to
kill the process once it hangs?

linux kernel 2.6.10
python 2.4.1


Don't do this in Python. Dealing with flaky hardware is a maintenance
problem, and applications should report the error, and either exit or
proceed as best as possible after the error.

Use the "dd" command to extract as much good data as you can from the
failing disk.

Ok, if you *really* want to do this in Python, the answer is - you
need to provide more information. For instance, *where* does the
process hang? It's possible you've hung the process in an
uninterruptible state in the kernel. If so, you're screwed. You need
to find out where the process hangs (kernel, libc, python, etc.), and
if in the kernel what it's waiting on. In the latter case, you need to
ask on a Linux list.

<mike
--
Mike Meyer <mw*@mired.org> http://www.mired.org/home/mwm/
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.
Jul 19 '05 #5

P: n/a
Hi All--

jd*****@gmail.com wrote:

I'm currently attempting something with

http://www.python.org/doc/current/lib/node368.html

but it seems the read operation is ignoring these signals just as it is
ignoring my signals from the kill command -- perhaps unsurprisingly.

Perhaps there is no hope.

Basically, if you are waiting for a hardware interrupt that never comes,
you are doomed. You can escape by rebooting; in dire cases the only way
out is to power down. One of the prime sources of zombie processes on
unix systems is users trying to interrupt (with ^C) a process that is
waiting for a hardware interrupt.

Metta,
Ivan
----------------------------------------------
Ivan Van Laningham
God N Locomotive Works
http://www.andi-holmes.com/
http://www.foretec.com/python/worksh...oceedings.html
Army Signal Corps: Cu Chi, Class of '70
Author: Teach Yourself Python in 24 Hours
Jul 19 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.