Based on kernel version 4.1. Page generated on 2015-06-28 12:13 EST.
1 Hard disk shock protection 2 ========================== 3 4 Author: Elias Oltmanns <email@example.com> 5 Last modified: 2008-10-03 6 7 8 0. Contents 9 ----------- 10 11 1. Intro 12 2. The interface 13 3. References 14 4. CREDITS 15 16 17 1. Intro 18 -------- 19 20 ATA/ATAPI-7 specifies the IDLE IMMEDIATE command with unload feature. 21 Issuing this command should cause the drive to switch to idle mode and 22 unload disk heads. This feature is being used in modern laptops in 23 conjunction with accelerometers and appropriate software to implement 24 a shock protection facility. The idea is to stop all I/O operations on 25 the internal hard drive and park its heads on the ramp when critical 26 situations are anticipated. The desire to have such a feature 27 available on GNU/Linux systems has been the original motivation to 28 implement a generic disk head parking interface in the Linux kernel. 29 Please note, however, that other components have to be set up on your 30 system in order to get disk shock protection working (see 31 section 3. References below for pointers to more information about 32 that). 33 34 35 2. The interface 36 ---------------- 37 38 For each ATA device, the kernel exports the file 39 block/*/device/unload_heads in sysfs (here assumed to be mounted under 40 /sys). Access to /sys/block/*/device/unload_heads is denied with 41 -EOPNOTSUPP if the device does not support the unload feature. 42 Otherwise, writing an integer value to this file will take the heads 43 of the respective drive off the platter and block all I/O operations 44 for the specified number of milliseconds. When the timeout expires and 45 no further disk head park request has been issued in the meantime, 46 normal operation will be resumed. The maximal value accepted for a 47 timeout is 30000 milliseconds. Exceeding this limit will return 48 -EOVERFLOW, but heads will be parked anyway and the timeout will be 49 set to 30 seconds. However, you can always change a timeout to any 50 value between 0 and 30000 by issuing a subsequent head park request 51 before the timeout of the previous one has expired. In particular, the 52 total timeout can exceed 30 seconds and, more importantly, you can 53 cancel a previously set timeout and resume normal operation 54 immediately by specifying a timeout of 0. Values below -2 are rejected 55 with -EINVAL (see below for the special meaning of -1 and -2). If the 56 timeout specified for a recent head park request has not yet expired, 57 reading from /sys/block/*/device/unload_heads will report the number 58 of milliseconds remaining until normal operation will be resumed; 59 otherwise, reading the unload_heads attribute will return 0. 60 61 For example, do the following in order to park the heads of drive 62 /dev/sda and stop all I/O operations for five seconds: 63 64 # echo 5000 > /sys/block/sda/device/unload_heads 65 66 A simple 67 68 # cat /sys/block/sda/device/unload_heads 69 70 will show you how many milliseconds are left before normal operation 71 will be resumed. 72 73 A word of caution: The fact that the interface operates on a basis of 74 milliseconds may raise expectations that cannot be satisfied in 75 reality. In fact, the ATA specs clearly state that the time for an 76 unload operation to complete is vendor specific. The hint in ATA-7 77 that this will typically be within 500 milliseconds apparently has 78 been dropped in ATA-8. 79 80 There is a technical detail of this implementation that may cause some 81 confusion and should be discussed here. When a head park request has 82 been issued to a device successfully, all I/O operations on the 83 controller port this device is attached to will be deferred. That is 84 to say, any other device that may be connected to the same port will 85 be affected too. The only exception is that a subsequent head unload 86 request to that other device will be executed immediately. Further 87 operations on that port will be deferred until the timeout specified 88 for either device on the port has expired. As far as PATA (old style 89 IDE) configurations are concerned, there can only be two devices 90 attached to any single port. In SATA world we have port multipliers 91 which means that a user-issued head parking request to one device may 92 actually result in stopping I/O to a whole bunch of devices. However, 93 since this feature is supposed to be used on laptops and does not seem 94 to be very useful in any other environment, there will be mostly one 95 device per port. Even if the CD/DVD writer happens to be connected to 96 the same port as the hard drive, it generally *should* recover just 97 fine from the occasional buffer under-run incurred by a head park 98 request to the HD. Actually, when you are using an ide driver rather 99 than its libata counterpart (i.e. your disk is called /dev/hda 100 instead of /dev/sda), then parking the heads of one drive (drive X) 101 will generally not affect the mode of operation of another drive 102 (drive Y) on the same port as described above. It is only when a port 103 reset is required to recover from an exception on drive Y that further 104 I/O operations on that drive (and the reset itself) will be delayed 105 until drive X is no longer in the parked state. 106 107 Finally, there are some hard drives that only comply with an earlier 108 version of the ATA standard than ATA-7, but do support the unload 109 feature nonetheless. Unfortunately, there is no safe way Linux can 110 detect these devices, so you won't be able to write to the 111 unload_heads attribute. If you know that your device really does 112 support the unload feature (for instance, because the vendor of your 113 laptop or the hard drive itself told you so), then you can tell the 114 kernel to enable the usage of this feature for that drive by writing 115 the special value -1 to the unload_heads attribute: 116 117 # echo -1 > /sys/block/sda/device/unload_heads 118 119 will enable the feature for /dev/sda, and giving -2 instead of -1 will 120 disable it again. 121 122 123 3. References 124 ------------- 125 126 There are several laptops from different vendors featuring shock 127 protection capabilities. As manufacturers have refused to support open 128 source development of the required software components so far, Linux 129 support for shock protection varies considerably between different 130 hardware implementations. Ideally, this section should contain a list 131 of pointers at different projects aiming at an implementation of shock 132 protection on different systems. Unfortunately, I only know of a 133 single project which, although still considered experimental, is fit 134 for use. Please feel free to add projects that have been the victims 135 of my ignorance. 136 137 - http://www.thinkwiki.org/wiki/HDAPS 138 See this page for information about Linux support of the hard disk 139 active protection system as implemented in IBM/Lenovo Thinkpads. 140 141 142 4. CREDITS 143 ---------- 144 145 This implementation of disk head parking has been inspired by a patch 146 originally published by Jon Escombe <firstname.lastname@example.org>. My efforts 147 to develop an implementation of this feature that is fit to be merged 148 into mainline have been aided by various kernel developers, in 149 particular by Tejun Heo and Bartlomiej Zolnierkiewicz.