debian/0000755000000000000000000000000013323672272007175 5ustar debian/smartmontools.lintian-overrides0000644000000000000000000000024513323672272015477 0ustar # Full stop at end of synopsis is OK - it doesn't end a sentence but is part of # an abbreviation. smartmontools: description-synopsis-might-not-be-phrased-properly debian/NEWS0000644000000000000000000000037613323672272007702 0ustar smartmontools (5.37-1) unstable; urgency=low Prior to 5.37 temperature logging was enabled per default on SCSI disks, as of version 5.37 please use the -W option in smartd.conf. -- Guido Guenther Thu, 05 Apr 2007 10:18:10 +0200 debian/10mail0000644000000000000000000000034713323672272010207 0ustar #!/bin/bash -e # Send mail if /usr/bin/mail exists if ! [ -x /usr/bin/mail ]; then echo "Your system does not have /usr/bin/mail. Install the mailx or mailutils package" exit 1 fi input=$1 shift /usr/bin/mail "$@" < $input debian/badblockhowto.html0000644000000000000000000015041713323672272012715 0ustar Bad block HOWTO for smartmontools

Bad block HOWTO for smartmontools

Bruce Allen

Douglas Gilbert

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts.

For an online copy of the license see www.fsf.org/copyleft/fdl.html.

2007-01-23

Revision History
Revision 1.12007-01-23dpg
add sections on ReiserFS and partition table damage
Revision 1.02006-11-14dpg
merge BadBlockHowTo.txt and BadBlockSCSIHowTo.txt

Abstract

This article describes what actions might be taken when smartmontools detects a bad block on a disk. It demonstrates how to identify the file associated with an unreadable disk sector, and how to force that sector to reallocate.


Introduction

Handling bad blocks is a difficult problem as it often involves decisions about losing information. Modern storage devices tend to handle the simple cases automatically, for example by writing a disk sector that was read with difficulty to another area on the media. Even though such a remapping can be done by a disk drive transparently, there is still a lingering worry about media deterioration and the disk running out of spare sectors to remap.

Can smartmontools help? As the SMART acronym [1] suggests, the smartctl command and the smartd daemon concentrate on monitoring and analysis. So apart from changing some reporting settings, smartmontools will not modify the raw data in a device. Also smartmontools only works with physical devices, it does not know about partitions and file systems. So other tools are needed. The job of smartmontools is to alert the user that something is wrong and user intervention may be required.

When a bad block is reported one approach is to work out the mapping between the logical block address used by a storage device and a file or some other component of a file system using that device. Note that there may not be such a mapping reflecting that a bad block has been found at a location not currently used by the file system. A user may want to do this analysis to localize and minimize the number of replacement files that are retrieved from some backup store. This approach requires knowledge of the file system involved and this document uses the Linux ext2/ext3 and ReiserFS file systems for examples. Also the type of content may come into play. For example if an area storing video has a corrupted sector, it may be easiest to accept that a frame or two might be corrupted and instruct the disk not to retry as that may have the visual effect of causing a momentary blank into a 1 second pause (while the disk retries the faulty sector, often accompanied by a telltale clicking sound).

Another approach is to ignore the upper level consequences (e.g. corrupting a file or worse damage to a file system) and use the facilities offered by a storage device to repair the damage. The SCSI disk command set is used elaborate on this low level approach.

Repairs in a file system

This section contains examples of what to do at the file system level when smartmontools reports a bad block. These examples assume the Linux operating system and either the ext2/ext3 or ReiserFS file system. The various Linux commands shown have man pages and the reader is encouraged to examine these. Of note is the dd command which is often used in repair work [2] and has a unique command line syntax.

The authors would like to thank Sergey Vlasov, Theodore Ts'o, Michael Bendzick, and others for explaining this approach. The authors would like to add text showing how to do this for other file systems, in particular XFS, and JFS: please email if you can provide this information.

ext2/ext3 first example

In this example, the disk is failing self-tests at Logical Block Address LBA = 0x016561e9 = 23421417. The LBA counts sectors in units of 512 bytes, and starts at zero.

root]# smartctl -l selftest /dev/hda:

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       90%       217         0x016561e9

Note that other signs that there is a bad sector on the disk can be found in the non-zero value of the Current Pending Sector count:

root]# smartctl -A /dev/hda
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       1
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       1

First Step: We need to locate the partition on which this sector of the disk lives:

root]# fdisk -lu /dev/hda

Disk /dev/hda: 123.5 GB, 123522416640 bytes
255 heads, 63 sectors/track, 15017 cylinders, total 241254720 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1   *        63   4209029   2104483+  83  Linux
/dev/hda2       4209030   5269319    530145   82  Linux swap
/dev/hda3       5269320 238227884 116479282+  83  Linux
/dev/hda4     238227885 241248104   1510110   83  Linux

The partition /dev/hda3 starts at LBA 5269320 and extends past the 'problem' LBA. The 'problem' LBA is offset 23421417 - 5269320 = 18152097 sectors into the partition /dev/hda3.

To verify the type of the file system and the mount point, look in /etc/fstab:

root]# grep hda3 /etc/fstab
/dev/hda3 /data ext2 defaults 1 2

You can see that this is an ext2 file system, mounted at /data.

Second Step: we need to find the block size of the file system (normally 4096 bytes for ext2):

root]# tune2fs -l /dev/hda3 | grep Block
Block count:              29119820
Block size:               4096

In this case the block size is 4096 bytes. Third Step: we need to determine which File System Block contains this LBA. The formula is:

  b = (int)((L-S)*512/B)
where:
b = File System block number
B = File system block size in bytes
L = LBA of bad sector
S = Starting sector of partition as shown by fdisk -lu
and (int) denotes the integer part.

In our example, L=23421417, S=5269320, and B=4096. Hence the 'problem' LBA is in block number

   b = (int)18152097*512/4096 = (int)2269012.125
so b=2269012.

Note: the fractional part of 0.125 indicates that this problem LBA is actually the second of the eight sectors that make up this file system block.

Fourth Step: we use debugfs to locate the inode stored in this block, and the file that contains that inode:

root]# debugfs
debugfs 1.32 (09-Nov-2002)
debugfs:  open /dev/hda3
debugfs:  testb 2269012
Block 2269012 not in use

If the block is not in use, as in the above example, then you can skip the rest of this step and go ahead to Step Five.

If, on the other hand, the block is in use, we want to identify the file that uses it:

debugfs:  testb 2269012
Block 2269012 marked in use
debugfs:  icheck 2269012
Block   Inode number
2269012 41032
debugfs:  ncheck 41032
Inode   Pathname
41032   /S1/R/H/714197568-714203359/H-R-714202192-16.gwf

In this example, you can see that the problematic file (with the mount point included in the path) is: /data/S1/R/H/714197568-714203359/H-R-714202192-16.gwf

When we are working with an ext3 file system, it may happen that the affected file is the journal itself. Generally, if this is the case, the inode number will be very small. In any case, debugfs will not be able to get the file name:

debugfs:  testb 2269012
Block 2269012 marked in use
debugfs:  icheck 2269012
Block   Inode number
2269012 8
debugfs:  ncheck 8
Inode   Pathname
debugfs:

To get around this situation, we can remove the journal altogether:

tune2fs -O ^has_journal /dev/hda3

and then start again with Step Four: we should see this time that the wrong block is not in use any more. If we removed the journal file, at the end of the whole procedure we should remember to rebuild it:

tune2fs -j /dev/hda3

Fifth Step NOTE: This last step will permanently and irretrievably destroy the contents of the file system block that is damaged: if the block was allocated to a file, some of the data that is in this file is going to be overwritten with zeros. You will not be able to recover that data unless you can replace the file with a fresh or correct version.

To force the disk to reallocate this bad block we'll write zeros to the bad block, and sync the disk:

root]# dd if=/dev/zero of=/dev/hda3 bs=4096 count=1 seek=2269012
root]# sync

Now everything is back to normal: the sector has been reallocated. Compare the output just below to similar output near the top of this article:

root]# smartctl -A /dev/hda
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       1
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       1
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       1

Note: for some disks it may be necessary to update the SMART Attribute values by using smartctl -t offline /dev/hda

We have corrected the first errored block. If more than one blocks were errored, we should repeat all the steps for the subsequent ones. After we do that, the disk will pass its self-tests again:

root]# smartctl -t long /dev/hda  [wait until test completes, then]
root]# smartctl -l selftest /dev/hda

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%       239         -
# 2  Extended offline    Completed: read failure       90%       217         0x016561e9
# 3  Extended offline    Completed: read failure       90%       212         0x016561e9
# 4  Extended offline    Completed: read failure       90%       181         0x016561e9
# 5  Extended offline    Completed without error       00%        14         -
# 6  Extended offline    Completed without error       00%         4         -

and no longer shows any offline uncorrectable sectors:

root]# smartctl -A /dev/hda
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       1
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       1
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0

ext2/ext3 second example

On this drive, the first sign of trouble was this email from smartd:

    To: ballen
    Subject: SMART error (selftest) detected on host: medusa-slave166.medusa.phys.uwm.edu

    This email was generated by the smartd daemon running on host:
    medusa-slave166.medusa.phys.uwm.edu in the domain: master001-nis

    The following warning/error was logged by the smartd daemon:
    Device: /dev/hda, Self-Test Log error count increased from 0 to 1

Running smartctl -a /dev/hda confirmed the problem:

Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       80%       682         0x021d9f44

Note that the failing LBA reported is 0x021d9f44 (base 16) = 35495748 (base 10)
    
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       3
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       3

and one can see above that there are 3 sectors on the list of pending sectors that the disk can't read but would like to reallocate.

The device also shows errors in the SMART error log:

Error 212 occurred at disk power-on lifetime: 690 hours
  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 12 46 9f 1d e2  Error: UNC 18 sectors at LBA = 0x021d9f46 = 35495750

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Timestamp  Command/Feature_Name
  -- -- -- -- -- -- -- --   ---------  --------------------
  25 00 12 46 9f 1d e0 00 2485545.000  READ DMA EXT

Signs of trouble at this LBA may also be found in SYSLOG:

[root]# grep LBA /var/log/messages | awk '{print $12}' | sort | uniq
 LBAsect=35495748
 LBAsect=35495750

So I decide to do a quick check to see how many bad sectors there really are. Using the bash shell I check 70 sectors around the trouble area:

[root]# export i=35495730
[root]# while [ $i -lt 35495800 ]
        > do echo $i
        > dd if=/dev/hda of=/dev/null bs=512 count=1 skip=$i
        > let i+=1
        > done
 
<SNIP>   

35495734
1+0 records in
1+0 records out
35495735
dd: reading `/dev/hda': Input/output error
0+0 records in
0+0 records out

<SNIP>

35495751
dd: reading `/dev/hda': Input/output error
0+0 records in
0+0 records out
35495752
1+0 records in
1+0 records out

<SNIP>

which shows that the seventeen sectors 35495735-35495751 (inclusive) are not readable.

Next, we identify the files at those locations. The partitioning information on this disk is identical to the first example above, and as in that case the problem sectors are on the third partition /dev/hda3. So we have:

     L=35495735 to 35495751
     S=5269320
     B=4096

so that b=3778301 to 3778303 are the three bad blocks in the file system.

[root]# debugfs
debugfs 1.32 (09-Nov-2002)
debugfs:  open /dev/hda3
debugfs:  icheck 3778301
Block   Inode number
3778301 45192
debugfs:  icheck 3778302
Block   Inode number
3778302 45192
debugfs:  icheck 3778303
Block   Inode number
3778303 45192
debugfs:  ncheck 45192
Inode   Pathname
45192   /S1/R/H/714979488-714985279/H-R-714979984-16.gwf
debugfs:  quit

Note that the first few steps of this procedure could also be done with a single command, which is very helpful if there are many bad blocks (thanks to Danie Marais for pointing this out):

debugfs: icheck 3778301 3778302 3778303

And finally, just to confirm that this is really the damaged file:

[root]# md5sum /data/S1/R/H/714979488-714985279/H-R-714979984-16.gwf
md5sum: /data/S1/R/H/714979488-714985279/H-R-714979984-16.gwf: Input/output error

Finally we force the disk to reallocate the three bad blocks:

[root]# dd if=/dev/zero of=/dev/hda3 bs=4096 count=3 seek=3778301
[root]# sync

We could also probably use:

[root]# dd if=/dev/zero of=/dev/hda bs=512 count=17 seek=35495735

At this point we now have:

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0

which is encouraging, since the pending sectors count is now zero. Note that the drive reallocation count has not yet increased: the drive may now have confidence in these sectors and have decided not to reallocate them..

A device self test:

  [root#] smartctl -t long /dev/hda
(then wait about an hour) shows no unreadable sectors or errors:

Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%       692         -
# 2  Extended offline    Completed: read failure       80%       682         0x021d9f44

Unassigned sectors

This section was written by Kay Diederichs. Even though this section assumes Linux and the ext2/ext3 file system, the strategy should be more generally applicable.

I read your badblocks-howto at and greatly benefited from it. One thing that's (maybe) missing is that often the smartctl -t long scan finds a bad sector which is not assigned to any file. In that case it does not help to run debugfs, or rather debugfs reports the fact that no file owns that sector. Furthermore, it is somewhat laborious to come up with the correct numbers for debugfs, and debugfs is slow ...

So what I suggest in the case of presence of Current_Pending_Sector/Offline_Uncorrectable errors is to create a huge file on that file system.

  dd if=/dev/zero of=/some/mount/point bs=4k

creates the file. Leave it running until the partition/file system is full. This will make the disk reallocate those sectors which do not belong to a file. Check the smartctl -a output after that and make sure that the sectors are reallocated. If any remain, use the debugfs method. Of course the usual caveats apply - back it up first, and so on.

ReiserFS example

This section was written by Joachim Jautz with additions from Manfred Schwarb.

The following problems were reported during a scheduled test:

smartd[575]: Device: /dev/hda, starting scheduled Offline Immediate Test.
[... 1 hour later ...]
smartd[575]: Device: /dev/hda, 1 Currently unreadable (pending) sectors
smartd[575]: Device: /dev/hda, 1 Offline uncorrectable sectors

[Step 0] The SMART selftest/error log (see smartctl -l selftest) indicated there was a problem with block address (i.e. the 512 byte sector at) 58656333. The partition table (e.g. see sfdisk -luS /dev/hda or fdisk -ul /dev/hda) indicated that this block was in the /dev/hda3 partition which contained a ReiserFS file system. That partition started at block address 54781650.

While doing the initial analysis it may also be useful to take a copy of the disk attributes returned by smartctl -A /dev/hda. Specifically the values associated with the "Reallocated_Sector_Ct" and "Reallocated_Event_Count" attributes (for ATA disks, the grown list (GLIST) length for SCSI disks). If these are incremented at the end of the procedure it indicates that the disk has re-allocated one or more sectors.

[Step 1] Get the file system's block size:

# debugreiserfs /dev/hda3 | grep '^Blocksize'
Blocksize: 4096

[Step 2] Calculate the block number:

# echo "(58656333-54781650)*512/4096" | bc -l
484335.37500000000000000000

It is re-assuring that the calculated 4 KB damaged block address in /dev/hda3 is less than "Count of blocks on the device" shown in the output of debugreiserfs shown above.

[Step 3] Try to get more info about this block => reading the block fails as expected but at least we see now that it seems to be unused. If we do not get the `Cannot read the block' error we should check if our calculation in [Step 2] was correct ;)

# debugreiserfs -1 484335 /dev/hda3
debugreiserfs 3.6.19 (2003 http://www.namesys.com)

484335 is free in ondisk bitmap
The problem has occurred looks like a hardware problem.

If you have bad blocks, we advise you to get a new hard drive, because once you get one bad block that the disk drive internals cannot hide from your sight, the chances of getting more are generally said to become much higher (precise statistics are unknown to us), and this disk drive is probably not expensive enough for you to risk your time and data on it. If you don't want to follow that advice then if you have just a few bad blocks, try writing to the bad blocks and see if the drive remaps the bad blocks (that means it takes a block it has in reserve and allocates it for use for of that block number). If it cannot remap the block, use badblock option (-B) with reiserfs utils to handle this block correctly.

bread: Cannot read the block (484335): (Input/output error).

Aborted

So it looks like we have the right (i.e. faulty) block address.

[Step 4] Try then to find the affected file [3]:

tar -cO /mydir | cat >/dev/null

If you do not find any unreadable files, then the block may be free or located in some metadata of the file system.

[Step 5] Try your luck: bang the affected block with badblocks -n (non-destructive read-write mode, do unmount first), if you are very lucky the failure is transient and you can provoke reallocation [4]:

# badblocks -b 4096 -p 3 -s -v -n /dev/hda3 `expr 484335 + 100` `expr 484335 - 100`

[5]

check success with debugreiserfs -1 484335 /dev/hda3. Otherwise:

[Step 6] Perform this step only if Step 5 has failed to fix the problem: overwrite that block to force reallocation:

# dd if=/dev/zero of=/dev/hda3 count=1 bs=4096 seek=484335
1+0 records in
1+0 records out
4096 bytes transferred in 0.007770 seconds (527153 bytes/sec)

[Step 7] If you can't rule out the bad block being in metadata, do a file system check:

reiserfsck --check

This could take a long time so you probably better go for lunch ...

[Step 8] Proceed as stated earlier. For example, sync disk and run a long selftest that should succeed now.

Repairs at the disk level

This section first looks at a damaged partition table. Then it ignores the upper level impact of a bad block and just repairs the underlying sector so that defective sector will not cause problems in the future.

Partition table problems

Some software failures can lead to zeroes or random data being written on the first block of a disk. For disks that use a DOS-based partitioning scheme this will overwrite the partition table which is found at the end of the first block. This is a single point of failure so after the damage tools like fdisk have no alternate data to use so they report no partitions or a damaged partition table.

One utility that may help is testdisk which can scan a disk looking for partitions and recreate a partition table if requested. [6]

Programs that create DOS partitions often place the first partition at logical block address 63. In Linux a loop back mount can be attempted at the appropriate offset of a disk with a damaged partition table. This approach may involve placing the disk with the damaged partition table in a working computer or perhaps an external USB enclosure. Assuming the disk with the damaged partition is /dev/hdb. Then the following read-only loop back mount could be tried:

# mount -r /dev/hdb -o loop,offset=32256 /mnt

The offset is in bytes so the number given is (63 * 512). If the file system cannot be identified then a '-t <fs_type>' may be needed (although this is not a good sign). If this mount is successful, a backup procedure is advised.

Only the primary DOS partitions are recorded in the first block of a disk. The extended DOS partition table is placed elsewhere on a disk. Again there is only one copy of it so it represents another single point of failure. All DOS partition information can be read in a form that can be used to recreate the tables with the sfdisk command. Obviously this needs to be done beforehand and the file put on other media. Here is how to fetch the partition table information:

# sfdisk -dx /dev/hda > my_disk_partition_info.txt

Then my_disk_partition_info.txt should be placed on other media. If disaster strikes, then the disk with the damaged partition table(s) can be placed in a working system, let us say the damaged disk is now at /dev/hdc, and the following command restores the partition table(s):

# sfdisk -x -O part_block_prior.img /dev/hdc < my_disk_partition_info.txt

Since the above command is potentially destructive it takes a copy of the block(s) holding the partition table(s) and puts it in part_block_prior.img prior to any changes. Then it changes the partition tables as indicated by my_disk_partition_info.txt. For what it is worth the author did test this on his system! [7]

For creating, destroying, resizing, checking and copying partitions, and the file systems on them, GNU's parted is worth examining. The Large Disk HOWTO is also a useful resource.

LVM repairs

This section was written by Frederic BOITEUX. It was titled: "HOW TO LOCATE AND REPAIR BAD BLOCKS ON AN LVM VOLUME".

Smartd reports an error in a short test :

# smartctl -a /dev/hdb
...
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed: read failure       90%        66         37383668

So the disk has a bad block located in LBA block 37383668

In which physical partition is the bad block ?

# sfdisk -luS /dev/hdb  # or 'fdisk -ul /dev/hdb'

Disk /dev/hdb: 9729 cylinders, 255 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0

   Device Boot    Start       End   #sectors  Id  System
/dev/hdb1            63    996029     995967  82  Linux swap / Solaris
/dev/hdb2   *    996030   1188809     192780  83  Linux
/dev/hdb3       1188810 156296384  155107575  8e  Linux LVM
/dev/hdb4             0         -          0   0  Empty

It's in the /dev/hdb3 partition, a LVM2 partition. From the LVM2 partition beginning, the bad block has an offset of

(37383668 - 1188810) = 36194858

We have to find in which LVM2 logical partition the block belongs to.

In which logical partition is the bad block ?

IMPORTANT : LVM2 can use different schemes dividing its physical partitions to logical ones : linear, striped, contiguous or not... The following example assumes that allocation is linear !

The physical partition used by LVM2 is divided in PE (Physical Extent) units of the same size, starting at pe_start' 512 bytes blocks from the beginning of the physical partition.

The 'pvdisplay' command gives the size of the PE (in KB) of the LVM partition :

#  part=/dev/hdb3 ; pvdisplay -c $part | awk -F: '{print $8}'
4096

To get its size in LBA block size (512 bytes or 0.5 KB), we multiply this number by 2 : 4096 * 2 = 8192 blocks for each PE.

To find the offset from the beginning of the physical partition is a bit more difficult : if you have a recent LVM2 version, try :

# pvs -o+pe_start $part

Either, you can look in /etc/lvm/backup :

# grep pe_start $(grep -l $part /etc/lvm/backup/*)
                        pe_start = 384

Then, we search in which PE is the badblock, calculating the PE rank in which the faulty block of the partition is : physical partition's bad block number / sizeof(PE) =

36194858 / 8192 = 4418.3176

So we have to find in which LVM2 logical partition is used the PE number 4418 (count starts from 0) :

# lvdisplay --maps |egrep 'Physical|LV Name|Type'
  LV Name                /dev/WDC80Go/racine
    Type                linear
    Physical volume     /dev/hdb3
    Physical extents    0 to 127
  LV Name                /dev/WDC80Go/usr
    Type                linear
    Physical volume     /dev/hdb3
    Physical extents    128 to 1407
  LV Name                /dev/WDC80Go/var
    Type                linear
    Physical volume     /dev/hdb3
    Physical extents    1408 to 1663
  LV Name                /dev/WDC80Go/tmp
    Type                linear
    Physical volume     /dev/hdb3
    Physical extents    1664 to 1791
  LV Name                /dev/WDC80Go/home
    Type                linear
    Physical volume     /dev/hdb3
    Physical extents    1792 to 3071
  LV Name                /dev/WDC80Go/ext1
    Type                linear
    Physical volume     /dev/hdb3
    Physical extents    3072 to 10751
  LV Name                /dev/WDC80Go/ext2
    Type                linear
    Physical volume     /dev/hdb3
    Physical extents    10752 to 18932

So the PE #4418 is in the /dev/WDC80Go/ext1 LVM logical partition.

Size of logical block of file system on /dev/WDC80Go/ext1  :

It's a ext3 fs, so I get it like this :

# dumpe2fs /dev/WDC80Go/ext1 | grep 'Block size'
dumpe2fs 1.37 (21-Mar-2005)
Block size:               4096

bad block number for the file system :

The logical partition begins on PE 3072 :

 (# PE's start of partition * sizeof(PE)) + parttion offset[pe_start] =
 (3072 * 8192) + 384 = 25166208

512b block of the physical partition, so the bad block number for the file system  is :

(36194858 - 25166208) / (sizeof(fs block) / 512)
= 11028650 / (4096 / 512)  = 1378581.25

Test of the fs bad block :

dd if=/dev/WDC80Go/ext1 of=block1378581 bs=4096 count=1 skip=1378581

If this dd command succeeds, without any error message in console or syslog, then the block number calculation is probably wrong ! *Don't* go further, re-check it and if you don't find the error, please renounce !

Search / correction follows the same scheme as for simple partitions :

  • find possible impacted files with debugfs (icheck <fs block nb>, then ncheck <icheck nb>).

  • reallocate bad block writing zeros in it, *using the fs block size* :

dd if=/dev/zero of=/dev/WDC80Go/ext1 count=1 bs=4096 seek=1378581

Et voilà !

Bad block reassignment

The SCSI disk command set and associated disk architecture are assumed in this section. SCSI disks have their own logical to physical mapping allowing a damaged sector (usually carrying 512 bytes of data) to be remapped irrespective of the operating system, file system or software RAID being used.

The terms block and sector are used interchangeably, although block tends to get used in higher level or more abstract contexts such as a logical block.

When a SCSI disk is formatted, defective sectors identified during the manufacturing process (the so called primary list: PLIST), those found during the format itself (the certification list: CLIST), those given explicitly to the format command (the DLIST) and optionally the previous grown list (GLIST) are not used in the logical block map. The number (and low level addresses) of the unmapped sectors can be found with the READ DEFECT DATA SCSI command.

SCSI disks tend to be divided into zones which have spare sectors and perhaps spare tracks, to support the logical block address mapping process. The idea is that if a logical block is remapped, the heads do not have to move a long way to access the replacement sector. Note that spare sectors are a scarce resource.

Once a SCSI disk format has completed successfully, other problems may appear over time. These fall into two categories:

  • recoverable: the Error Correction Codes (ECC) detect a problem but it is small enough to be corrected. Optionally other strategies such as retrying the access may retrieve the data.

  • unrecoverable: try as it may, the disk logic and ECC algorithms cannot recover the data. This is often reported as a medium error.

Other things can go wrong, typically associated with the transport and they will be reported using a term other than medium error. For example a disk may decide a read operation was successful but a computer's host bus adapter (HBA) checking the incoming data detects a CRC error due to a bad cable or termination.

Depending on the disk vendor, recoverable errors can be ignored. After all, some disks have up to 68 bytes of ECC above the payload size of 512 bytes so why use up spare sectors which are limited in number [8] ? If the disk can recover the data and does decide to re-allocate (reassign) a sector, then first it checks the settings of the ARRE and AWRE bits in the read-write error recovery mode page. Usually these bits are set [9] enabling automatic (read or write) re-allocation. The automatic re-allocation may also fail if the zone (or disk) has run out of spare sectors.

Another consideration with RAIDs, and applications that require a high data rate without pauses, is that the controller logic may not want a disk to spend too long trying to recover an error.

Unrecoverable errors will cause a medium error sense key, perhaps with some useful additional sense information. If the extended background self test includes a full disk read scan, one would expect the self test log to list the bad block, as shown in the the section called “Repairs in a file system”. Recent SCSI disks with a periodic background scan should also list unrecoverable read errors (and some recoverable errors as well). The advantage of the background scan is that it runs to completion while self tests will often terminate at the first serious error.

SCSI disks expect unrecoverable errors to be fixed manually using the REASSIGN BLOCKS SCSI command since loss of data is involved. It is possible that an operating system or a file system could issue the REASSIGN BLOCKS command itself but the authors are unaware of any examples. The REASSIGN BLOCKS command will reassign one or more blocks, attempting to (partially ?) recover the data (a forlorn hope at this stage), fetch an unused spare sector from the current zone while adding the damaged old sector to the GLIST (hence the name "grown" list). The contents of the GLIST may not be that interesting but smartctl prints out the number of entries in the grown list and if that number grows quickly, the disk may be approaching the end of its useful life.

Here is an alternate brute force technique to consider: if the data on the SCSI or ATA disk has all been backed up (e.g. is held on the other disks in a RAID 5 enclosure), then simply reformatting the disk may be the least cumbersome approach.

Example

Given a "bad block", it still may be useful to look at the fdisk command (if the disk has multiple partitions) to find out which partition is involved, then use debugfs (or a similar tool for the file system in question) to find out which, if any, file or other part of the file system may have been damaged. This is discussed in the the section called “Repairs in a file system”.

Then a program that can execute the REASSIGN BLOCKS SCSI command is required. In Linux (2.4 and 2.6 series), FreeBSD, Tru64(OSF) and Windows the author's sg_reassign utility in the sg3_utils package can be used. Also found in that package is sg_verify which can be used to check that a block is readable.

Assume that logical block address 1193046 (which is 123456 in hex) is corrupt [10] on the disk at /dev/sdb. A long selftest command like smartctl -t long /dev/sdb may result in log results like this:

# smartctl -l selftest /dev/sdb
smartctl version 5.37 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/


SMART Self-test log
Num  Test              Status            segment  LifeTime  LBA_first_err [SK ASC ASQ]
     Description                         number   (hours)
# 1  Background long   Failed in segment      -     354           1193046 [0x3 0x11 0x0]
# 2  Background short  Completed              -     323                 - [-   -    -]
# 3  Background short  Completed              -     194                 - [-   -    -]

The sg_verify utility can be used to confirm that there is a problem at that address:

# sg_verify --lba=1193046 /dev/sdb
verify (10):  Fixed format, current;  Sense key: Medium Error
 Additional sense: Unrecovered read error
  Info fld=0x123456 [1193046]
  Field replaceable unit code: 228
  Actual retry count: 0x008b
medium or hardware error, reported lba=0x123456

Now the GLIST length is checked before the block reassignment:

# sg_reassign --grown /dev/sdb
>> Elements in grown defect list: 0

And now for the actual reassignment followed by another check of the GLIST length:

# sg_reassign --address=1193046 /dev/sdb

# sg_reassign --grown /dev/sdb
>> Elements in grown defect list: 1

The GLIST length has grown by one as expected. If the disk was unable to recover any data, then the "new" block at lba 0x123456 has vendor specific data in it. The sg_reassign utility can also do bulk reassigns, see man sg_reassign for more information.

The dd command could be used to read the contents of the "new" block:

# dd if=/dev/sdb iflag=direct skip=1193046 of=blk.img bs=512 count=1

and a hex editor [11] used to view and potentially change the blk.img file. An altered blk.img file (or /dev/zero) could be written back with:

# dd if=blk.img of=/dev/sdb seek=1193046 oflag=direct bs=512 count=1

More work may be needed at the file system level, especially if the reassigned block held critical file system information such as a superblock or a directory.

Even if a full backup of the disk is available, or the disk has been "ejected" from a RAID, it may still be worthwhile to reassign the bad block(s) that caused the problem (or simply format the disk (see sg_format in the sg3_utils package)) and re-use the disk later (not unlike the way a replacement disk from a manufacturer might be used).

$Id: badblockhowto.xml 2873 2009-08-11 21:46:20Z dipohl $



[1] Self-Monitoring, Analysis and Reporting Technology -> SMART

[2] Starting with GNU coreutils release 5.3.0, the dd command in Linux includes the options 'iflag=direct' and 'oflag=direct'. Using these with the dd commands should be helpful, because adding these flags should avoid any interaction with the block buffering IO layer in Linux and permit direct reads/writes from the raw device. Use dd --help to see if your version of dd supports these options. If not, the latest code for dd can be found at alpha.gnu.org/gnu/coreutils.

[3] Do not use tar -c -f /dev/null or tar -cO /mydir >/dev/null. GNU tar does not actually read the files if /dev/null is used as archive path or as standard output, see info tar.

[4] Important: set blocksize range is arbitrary, but do not only test a single block, as bad blocks are often social. Not too large as this test probably has not 0% risk.

[5] The rather awkward `expr 484335 + 100` (note the back quotes) can be replaced with $((484335+100)) if the bash shell is being used. Similarly the last argument can become $((484335-100)) .

[6] testdisk scans the media for the beginning of file systems that it recognizes. It can be tricked by data that looks like the beginning of a file system or an old file system from a previous partitioning of the media (disk). So care should be taken. Note that file systems should not overlap apart from the fact that extended partitions lie wholly within a extended partition table allocation. Also if the root partition of a Linux/Unix installation can be found then the /etc/fstab file is a useful resource for finding the partition numbers of other partitions.

[7] Thanks to Manfred Schwarb for the information about storing partition table(s) beforehand.

[8] Detecting and fixing an error with ECC "on the fly" and not going the further step and reassigning the block in question may explain why some disks have large numbers in their read error counter log. Various worried users have reported large numbers in the "errors corrected without substantial delay" counter field which is in the "Errors corrected by ECC fast" column in the smartctl -l error output.

[9] Often disks inside a hardware RAID have the ARRE and AWRE bits cleared (disabled) so the RAID controller can do things manually or flag the disk for replacement.

[10] In this case the corruption was manufactured by using the WRITE LONG SCSI command. See sg_write_long in sg3_utils.

[11] Most window managers have a handy calculator that will do hex to decimal conversions. More work may be needed at the file system level,

debian/10powersave-notify0000644000000000000000000000040213323672272012576 0ustar #! /bin/sh # Send message if /usr/lib/powersave/powersave-notify exists or exit silently [ -x /usr/lib/powersave/powersave-notify ] || exit 0 /usr/lib/powersave/powersave-notify "Your hard disk drive is failing! S.M.A.R.T. message: $SMARTD_MESSAGE" debian/README.source0000644000000000000000000000350713323672272011361 0ustar This package uses quilt to manage all modifications to the upstream source. Changes are stored in the source package as diffs in debian/patches and applied during the build. To configure quilt to use debian/patches instead of patches, you want either to export QUILT_PATCHES=debian/patches in your environment or use this snippet in your ~/.quiltrc: for where in ./ ../ ../../ ../../../ ../../../../ ../../../../../; do if [ -e ${where}debian/rules -a -d ${where}debian/patches ]; then export QUILT_PATCHES=debian/patches fi done To get the fully patched source after unpacking the source package, cd to the root level of the source package and run: quilt push -a The last patch listed in debian/patches/series will become the current patch. To add a new set of changes, first run quilt push -a, and then run: quilt new where is a descriptive name for the patch, used as the filename in debian/patches. Then, for every file that will be modified by this patch, run: quilt add before editing those files. You must tell quilt with quilt add what files will be part of the patch before making changes or quilt will not work properly. After editing the files, run: quilt refresh to save the results as a patch. Alternately, if you already have an external patch and you just want to add it to the build system, run quilt push -a and then: quilt import -P /path/to/patch quilt push -a (add -p 0 to quilt import if needed). as above is the filename to use in debian/patches. The last quilt push -a will apply the patch to make sure it works properly. To remove an existing patch from the list of patches that will be applied, run: quilt delete You may need to run quilt pop -a to unapply patches first before running this command. debian/rules0000755000000000000000000000722013323672272010256 0ustar #!/usr/bin/make -f # Sample debian/rules that uses debhelper. # GNU copyright 1997 to 1999 by Joey Hess. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 export DEB_BUILD_HARDENING=1 DEB_BUILD_ARCH_OS ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH_OS) DEB_BUILD_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH_CPU) ifeq ($(DEB_HOST_ARCH_OS),linux) CONFIGURE_ARGS += --with-selinux endif ifeq ($(DEB_HOST_ARCH_OS),kfreebsd) CFLAGS += -I/usr/include/freebsd endif CFLAGS += -fsigned-char -Wall ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) INSTALL_PROGRAM = install -s else INSTALL_PROGRAM = install endif PACKAGE = smartmontools SRC_VERSION := $(shell dpkg-parsechangelog | sed -ne 's/^Version: \(.*\)-.*/\1/p'| cut -d':' -f2) SVN_REVISION := $(shell echo $(SRC_VERSION) | awk -F"+" '{ print $$2 }' | sed 's/svn//' ) TARBALL = $(PACKAGE)_$(SRC_VERSION).orig.tar.gz get-orig-source: rm -rf get-orig-source $(TARBALL) mkdir get-orig-source svn export -r $(SVN_REVISION) https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk/smartmontools/ \ get-orig-source/$(PACKAGE)-$(SRC_VERSION).orig GZIP=--best tar czf $(TARBALL) -C get-orig-source $(PACKAGE)-$(SRC_VERSION).orig rm -rf get-orig-source echo " "$(TARBALL)" created; move it to the right destination to build the package" configure: configure-stamp configure-stamp: dh_testdir ./autogen.sh CFLAGS="${CFLAGS}" CXXFLAGS="${CFLAGS}" ./configure --prefix=/usr \ --sysconfdir=/etc \ --mandir=/usr/share/man \ --with-initscriptdir=no \ --with-docdir=/usr/share/doc/smartmontools \ --enable-drivedb \ --enable-savestates \ --enable-attributelog \ --with-savestates=/var/lib/smartmontools/smartd. \ --with-attributelog=/var/lib/smartmontools/attrlog. \ --with-exampledir=/usr/share/doc/smartmontools/examples/ \ --with-drivedbdir=/var/lib/smartmontools/drivedb \ ${CONFIGURE_ARGS} touch configure-stamp build: build-arch build-indep build-arch: build-stamp build-indep: build-stamp build-stamp: configure-stamp dh_testdir # Add here commands to compile the package. $(MAKE) touch build-stamp clean: dh_testdir dh_testroot # rm -f debian/logcheck.logcheck.ignore.* # Add here commands to clean up after the build process. [ ! -f Makefile ] || $(MAKE) distclean rm -f build-stamp configure-stamp \ Makefile.in examplescripts/Makefile.in aclocal.m4 configure dh_clean install: build dh_testdir dh_testroot dh_prep dh_installdirs $(MAKE) DESTDIR=$(CURDIR)/debian/smartmontools install install -D -m 755 debian/smartmontools-bug \ $(CURDIR)/debian/smartmontools/usr/share/bug/smartmontools # Build architecture-independent files here. binary-indep: # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installdocs dh_installexamples dh_installmenu dh_installlogrotate dh_install dh_installinit -- start 20 2 3 4 5 . stop 20 1 . dh_installcron dh_installman debian/update-smart-drivedb.8 dh_installinfo dh_lintian dh_installchangelogs ChangeLog dh_link dh_strip dh_compress dh_fixperms chmod 755 $(CURDIR)/debian/smartmontools/etc/smartmontools/run.d/10mail \ $(CURDIR)/debian/smartmontools/etc/smartmontools/run.d/10powersave-notify \ $(CURDIR)/debian/smartmontools/usr/share/smartmontools/smartd-runner dh_makeshlibs dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure get-orig-source debian/smartmontools.postinst0000644000000000000000000000066013323672272013725 0ustar #!/bin/sh set -e # Remove shutdown and reboot links; this init script does not need them. if dpkg --compare-versions "$2" lt "5.38+svn2879-1"; then if [ -e /etc/rc0.d/K20smartmontools ]; then rm -f /etc/rc0.d/K20smartmontools fi if [ -e /etc/rc6.d/K20smartmontools ]; then rm -f /etc/rc6.d/K20smartmontools fi fi dpkg-maintscript-helper rm_conffile \ /etc/init.d/smartd 6.1+svn3812-1~ smartmontools -- "$@" #DEBHELPER# debian/docs0000644000000000000000000000006713323672272010053 0ustar README TODO AUTHORS WARNINGS debian/badblockhowto.html debian/source/0000755000000000000000000000000013323672272010475 5ustar debian/source/format0000644000000000000000000000001413323672272011703 0ustar 3.0 (quilt) debian/smartmontools.install0000644000000000000000000000020513323672272013503 0ustar debian/smartd-runner usr/share/smartmontools debian/10mail etc/smartmontools/run.d debian/10powersave-notify etc/smartmontools/run.d debian/control0000644000000000000000000000253413323672272010604 0ustar Source: smartmontools Section: utils Priority: optional Maintainer: Giuseppe Iuculano Uploaders: Florian Maier Build-Depends: debhelper (>= 7), libcam-dev [kfreebsd-any], freebsd-glue [kfreebsd-any], automake1.11, autoconf, libcap-ng-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386 !sparc !avr32], libselinux1-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386], libusb2-dev [kfreebsd-i386 kfreebsd-amd64], hardening-wrapper Standards-Version: 3.9.4 Vcs-Git: git://anonscm.debian.org/collab-maint/smartmontools.git Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/smartmontools.git Homepage: http://smartmontools.sourceforge.net/ Package: smartmontools Architecture: any Conflicts: smartsuite, ucsc-smartsuite Depends: ${misc:Depends}, ${shlibs:Depends}, debianutils (>= 2.2), lsb-base (>= 3.2-14) Recommends: mailx | mailutils Suggests: gsmartcontrol, smart-notifier Description: control and monitor storage systems using S.M.A.R.T. The smartmontools package contains two utility programs (smartctl and smartd) to control and monitor storage systems using the Self-Monitoring, Analysis and Reporting Technology System (S.M.A.R.T.) built into most modern ATA and SCSI hard disks. It is derived from the smartsuite package, and includes support for ATA/ATAPI-5 disks. It should run on any modern Linux system. debian/README.Debian0000644000000000000000000000175013323672272011241 0ustar smartmontools for Debian ------------------------ To start smartd automatically on system startup set: start_smartd=yes in /etc/default/smartmontools. If you only want to enable S.M.A.R.T. for a device without running the daemon use the enable_smart variable. Don't use enable_smart for any disk monitored by smartd, this is likely to cause problems, especially for SATA (see e.g. http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=365027). Package Maintainers and system administrators can put scripts to be run when smartd detects an error into /etc/smartmontools/run.d. These scripts will be run by smartd-runner using run-parts(8). The script will receive the filename of the file containing the errormessage as first parameter. See /etc/smartmontools/run.d/10mail for an example. Upstream recommends running short self tests every day and long self tests once per week. Please read the file WARNINGS in this directory. -- Guido Guenther , Wen, 03 May 2006 21:47:00 +0000 debian/smartmontools.default0000644000000000000000000000065413323672272013471 0ustar # Defaults for smartmontools initscript (/etc/init.d/smartmontools) # This is a POSIX shell fragment # List of devices you want to explicitly enable S.M.A.R.T. for # Not needed (and not recommended) if the device is monitored by smartd #enable_smart="/dev/hda /dev/hdb" # uncomment to start smartd on system startup #start_smartd=yes # uncomment to pass additional options to smartd on startup #smartd_opts="--interval=1800" debian/smartmontools.preinst0000644000000000000000000000020613323672272013522 0ustar #!/bin/sh set -e dpkg-maintscript-helper rm_conffile \ /etc/init.d/smartd 6.1+svn3812-1~ smartmontools -- "$@" #DEBHELPER# debian/watch0000644000000000000000000000032713323672272010230 0ustar version=3 opts=uversionmangle=s/\.(tar.*|tgz|zip|gz|bz2)$//i,dversionmangle=s/[-.+~]?(cvs|svn|git|snapshot|pre|hg)(.*)$//i,pasv \ http://sf.net/smartmontools/smartmontools-?_?([\d+\.]+|\d+)\.(tar.*|tgz|zip|gz|bz2|) debian/smartmontools.init0000644000000000000000000000666113323672272013014 0ustar #!/bin/sh -e # # smartmontools init.d startup script # # (C) 2003,04,07 Guido Günther # # loosely based on the init script that comes with smartmontools which is # copyrighted 2002 by Bruce Allen # ### BEGIN INIT INFO # Provides: smartmontools # Required-Start: $syslog $remote_fs # Required-Stop: $syslog $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 1 # Short-Description: SMART monitoring daemon ### END INIT INFO SMARTCTL=/usr/sbin/smartctl DAEMON=/usr/sbin/smartd PIDFILE=/var/run/smartd.pid [ -x $SMARTCTL ] || exit 0 [ -x $DAEMON ] || exit 0 . /lib/lsb/init-functions RET=0 [ -r /etc/default/rcS ] && . /etc/default/rcS [ -r /etc/default/smartmontools ] && . /etc/default/smartmontools smartd_opts="--pidfile $PIDFILE $smartd_opts" enable_smart() { log_action_begin_msg "Enabling S.M.A.R.T." for device in $enable_smart; do log_action_cont_msg "$device" if ! $SMARTCTL --quietmode=errorsonly --smart=on $device; then log_action_cont_msg "(failed)" RET=2 fi done log_action_end_msg 0 } check_start_smartd_option() { if [ ! "$start_smartd" = "yes" ]; then [ "$VERBOSE" = "yes" ] && log_warning_msg "Not starting S.M.A.R.T. daemon smartd, disabled via /etc/default/smartmontools" return 1 else return 0 fi } running_pid() { # Check if a given process pid's cmdline matches a given name pid=$1 name=$2 [ -z "$pid" ] && return 1 [ ! -d /proc/$pid ] && return 1 cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1` # Is this the expected child? [ "$cmd" != "$name" ] && return 1 return 0 } running() { # Check if the process is running looking at /proc # (works for all users) # No pidfile, probably no daemon present [ ! -f "$PIDFILE" ] && return 1 # Obtain the pid and check it against the binary name pid=`cat $PIDFILE` running_pid $pid $DAEMON || return 1 return 0 } case "$1" in start) [ -n "$enable_smart" ] && enable_smart if check_start_smartd_option; then log_daemon_msg "Starting S.M.A.R.T. daemon" "smartd" if running; then log_progress_msg "already running" log_end_msg 0 exit 0 fi rm -f $PIDFILE if start-stop-daemon --start --quiet --pidfile $PIDFILE \ --exec $DAEMON -- $smartd_opts; then log_end_msg 0 else log_end_msg 1 RET=1 fi fi ;; stop) log_daemon_msg "Stopping S.M.A.R.T. daemon" "smartd" start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE log_end_msg 0 ;; reload|force-reload) log_daemon_msg "Reloading S.M.A.R.T. daemon" "smartd" if start-stop-daemon --stop --quiet --signal 1 \ --pidfile $PIDFILE; then log_end_msg 0 else log_end_msg 1 RET=1 fi ;; restart) if check_start_smartd_option; then log_daemon_msg "Restarting S.M.A.R.T. daemon" "smartd" start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE rm -f $PIDFILE if start-stop-daemon --start --quiet --pidfile $PIDFILE \ --exec $DAEMON -- $smartd_opts; then log_end_msg 0 else log_end_msg 1 RET=1 fi fi ;; status) status_of_proc $DAEMON smartd && exit 0 || exit $? ;; *) echo "Usage: /etc/init.d/smartmontools {start|stop|restart|reload|force-reload|status}" exit 1 esac exit $RET debian/copyright0000644000000000000000000000075313323672272011135 0ustar This package was debianized by Guido Guenther on Tue, 14 Jan 2003 12:58:00 +0000. It was downloaded from http://smartmontools.sourceforge.net/ Upstream Authors: Bruce Allen Copyright: Copyright (C) 2002-8 Bruce Allen License: You are free to distribute this software under the terms of the GNU General Public License Version 2. The full text of this license can be found in the file /usr/share/common-licenses/GPL-2 debian/smartd-runner0000644000000000000000000000024613323672272011723 0ustar #!/bin/bash -e tmp=$(tempfile) cat >$tmp run-parts --report --lsbsysinit --arg=$tmp --arg="$1" \ --arg="$2" --arg="$3" -- /etc/smartmontools/run.d rm -f $tmp debian/smartmontools-bug0000644000000000000000000000040413323672272012612 0ustar #!/bin/sh -e # # reportbug helper for smartmontools # # check what IDE_TASK options are set in the kernel: echo "Output of $0:" >&3 CONFIG=/boot/config-`uname -r` if [ -r "$CONFIG" ]; then grep IDE_TASK $CONFIG >&3 else echo "Couldn't parse $CONFIG" >&3 fi debian/dirs0000644000000000000000000000012713323672272010061 0ustar etc/smartmontools/run.d usr/share/smartmontools usr/sbin var/lib/smartmontools/drivedb debian/update-smart-drivedb.80000644000000000000000000000207113323672272013311 0ustar .TH UPDATE-SMART-DRIVEDB 8 "May 15, 2013" "smartmontools" "" .SH "NAME" update-smart-drivedb \- update smartmontools drive database .SH "SYNOPSIS" .B update-smart-drivedb .RB [ -v ] .RI [ DESTFILE ] .SH "DESCRIPTION" .B update-smart-drivedb updates .B /usr/share/smartmontools/drivedb.h or .I DESTFILE from smartmontools SVN repository. It tries to download first from the current branch and then from trunk. The tools used for downloading are either .BR curl (1), .BR wget "(1) or" .BR lynx (1). The old file is kept if the downloaded file is identical (ignoring the differences in Id string) otherwise it is moved to .BR drivedb.h.old . .SH "OPTIONS" .TP \-v verbose output .SH "EXAMPLES" .nf # update-smart-drivedb /usr/share/smartmontools/drivedb.h updated from branches/RELEASE_5_43_DRIVEDB .fi .SH "EXIT STATUS" The exit status is 0 if the database has been successfully updated. If an error occurs the exit status is 1. .SH "SEE ALSO" .BR smartctl(8), .BR smartd (8). .SH "AUTHOR" This manual page was written by .BR "Hannes von Haugwitz " . debian/compat0000644000000000000000000000000213323672272010373 0ustar 7 debian/patches/0000755000000000000000000000000013323672272010624 5ustar debian/patches/3w-sas0000644000000000000000000004600613323672272011672 0ustar Author: chrfranke Date: Tue Jul 27 13:08:31 2010 +0000 Linux: Support SATA drives on LSI 3ware 9750 controllers (ticket #86). Index: smartmontools-5.39.1+svn3124/CHANGELOG =================================================================== --- smartmontools-5.39.1+svn3124.orig/CHANGELOG 2010-07-12 21:21:00.000000000 +0200 +++ smartmontools-5.39.1+svn3124/CHANGELOG 2010-12-23 11:05:12.103063859 +0100 @@ -86,6 +86,10 @@ This fixes build on QNX (ticket #1). Thanks to Stefan (stevestereo) for testing. + [CF] Linux: Support SATA drives on LSI 3ware 9750 controllers. + Patch provided by Victor Payno (ticket #86). + Modified to avoid duplicate code. + [CF] drivedb.h update: - WD Caviar Green (Adv. Format) family Index: smartmontools-5.39.1+svn3124/NEWS =================================================================== --- smartmontools-5.39.1+svn3124.orig/NEWS 2010-06-11 18:21:25.000000000 +0200 +++ smartmontools-5.39.1+svn3124/NEWS 2010-12-23 11:05:12.103063859 +0100 @@ -22,6 +22,7 @@ SCT Error Recovery Control time limit. - smartctl options '--scan, --scan-open'. - Linux: Add '/dev/sd[a-c][a-z]' to smartd DEVICESCAN. +- Linux: Support SATA drives on LSI 3ware 9750 controllers. - Windows: Read 'drivedb.h' and 'smartd.conf' from exe directory. - Windows: Support for 64-bit executables. - Windows: Support for cross compilation on Linux. Index: smartmontools-5.39.1+svn3124/os_linux.cpp =================================================================== --- smartmontools-5.39.1+svn3124.orig/os_linux.cpp 2010-04-30 19:35:35.000000000 +0200 +++ smartmontools-5.39.1+svn3124/os_linux.cpp 2010-12-23 11:05:12.103063859 +0100 @@ -196,6 +196,7 @@ " smartctl --all --device=3ware,2 /dev/sda\n" " smartctl --all --device=3ware,2 /dev/twe0\n" " smartctl --all --device=3ware,2 /dev/twa0\n" + " smartctl --all --device=3ware,2 /dev/twl0\n" " (Prints all SMART info for 3rd ATA disk on 3ware RAID controller)\n" " smartctl --all --device=hpt,1/1/3 /dev/sda\n" " (Prints all SMART info for the SATA disk attached to the 3rd PMPort\n" @@ -1216,7 +1217,8 @@ enum escalade_type_t { AMCC_3WARE_678K, AMCC_3WARE_678K_CHAR, - AMCC_3WARE_9000_CHAR + AMCC_3WARE_9000_CHAR, + AMCC_3WARE_9700_CHAR }; linux_escalade_device(smart_interface * intf, const char * dev_name, @@ -1389,12 +1391,17 @@ bool linux_escalade_device::open() { - if (m_escalade_type == AMCC_3WARE_9000_CHAR || m_escalade_type == AMCC_3WARE_678K_CHAR) { + if (m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR || + m_escalade_type == AMCC_3WARE_678K_CHAR) { // the device nodes for these controllers are dynamically assigned, // so we need to check that they exist with the correct major // numbers and if not, create them - const char * node = (m_escalade_type == AMCC_3WARE_9000_CHAR ? "twa" : "twe" ); - const char * driver = (m_escalade_type == AMCC_3WARE_9000_CHAR ? "3w-9xxx": "3w-xxxx"); + const char * node = (m_escalade_type == AMCC_3WARE_9700_CHAR ? "twl" : + m_escalade_type == AMCC_3WARE_9000_CHAR ? "twa" : + "twe" ); + const char * driver = (m_escalade_type == AMCC_3WARE_9700_CHAR ? "3w-sas" : + m_escalade_type == AMCC_3WARE_9000_CHAR ? "3w-9xxx" : + "3w-xxxx" ); if (setup_3ware_nodes(node, driver)) return set_err((errno ? errno : ENXIO), "setup_3ware_nodes(\"%s\", \"%s\") failed", node, driver); } @@ -1461,7 +1468,7 @@ memset(ioctl_buffer, 0, TW_IOCTL_BUFFER_SIZE); // TODO: Handle controller differences by different classes - if (m_escalade_type==AMCC_3WARE_9000_CHAR) { + if (m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR) { tw_ioctl_apache = (TW_Ioctl_Buf_Apache *)ioctl_buffer; tw_ioctl_apache->driver_command.control_code = TW_IOCTL_FIRMWARE_PASS_THROUGH; tw_ioctl_apache->driver_command.buffer_length = 512; /* payload size */ @@ -1523,7 +1530,8 @@ // in dwords by 1 to account for the 64-bit single sgl 'address' // field. Note that this doesn't agree with the typedefs but it's // right (agree with kernel driver behavior/typedefs). - if (m_escalade_type==AMCC_3WARE_9000_CHAR && sizeof(long)==8) + if ((m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR) + && sizeof(long) == 8) passthru->size++; } else if (in.direction == ata_cmd_in::no_data) { @@ -1535,7 +1543,7 @@ passthru->sector_count = 0x0; } else if (in.direction == ata_cmd_in::data_out) { - if (m_escalade_type == AMCC_3WARE_9000_CHAR) + if (m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR) memcpy(tw_ioctl_apache->data_buffer, in.buffer, in.size); else if (m_escalade_type == AMCC_3WARE_678K_CHAR) memcpy(tw_ioctl_char->data_buffer, in.buffer, in.size); @@ -1548,7 +1556,8 @@ passthru->byte0.sgloff = 0x5; passthru->size = 0x7; // TODO: Other value for multi-sector ? passthru->param = 0xF; // PIO data write - if (m_escalade_type==AMCC_3WARE_9000_CHAR && sizeof(long)==8) + if ((m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR) + && sizeof(long) == 8) passthru->size++; } else @@ -1556,7 +1565,7 @@ // Now send the command down through an ioctl() int ioctlreturn; - if (m_escalade_type==AMCC_3WARE_9000_CHAR) + if (m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR) ioctlreturn=ioctl(get_fd(), TW_IOCTL_FIRMWARE_PASS_THROUGH, tw_ioctl_apache); else if (m_escalade_type==AMCC_3WARE_678K_CHAR) ioctlreturn=ioctl(get_fd(), TW_CMD_PACKET_WITH_DATA, tw_ioctl_char); @@ -1607,7 +1616,7 @@ // If this is a read data command, copy data to output buffer if (readdata) { - if (m_escalade_type==AMCC_3WARE_9000_CHAR) + if (m_escalade_type == AMCC_3WARE_9700_CHAR || m_escalade_type == AMCC_3WARE_9000_CHAR) memcpy(in.buffer, tw_ioctl_apache->data_buffer, in.size); else if (m_escalade_type==AMCC_3WARE_678K_CHAR) memcpy(in.buffer, tw_ioctl_char->data_buffer, in.size); @@ -2695,7 +2704,7 @@ if (!memcmp(req_buff + 8, "3ware", 5) || !memcmp(req_buff + 8, "AMCC", 4)) { close(); set_err(EINVAL, "AMCC/3ware controller, please try adding '-d 3ware,N',\n" - "you may need to replace %s with /dev/twaN or /dev/tweN", get_dev_name()); + "you may need to replace %s with /dev/twlN, /dev/twaN or /dev/tweN", get_dev_name()); return this; } @@ -2997,6 +3006,7 @@ static const char * lin_dev_scsi_tape1 = "ns"; static const char * lin_dev_scsi_tape2 = "os"; static const char * lin_dev_scsi_tape3 = "nos"; +static const char * lin_dev_3ware_9700_char = "twl"; static const char * lin_dev_3ware_9000_char = "twa"; static const char * lin_dev_3ware_678k_char = "twe"; static const char * lin_dev_cciss_dir = "cciss/"; @@ -3080,6 +3090,11 @@ strlen(lin_dev_scsi_tape3))) return new linux_scsi_device(this, name, ""); + // form /dev/twl* + if (!strncmp(lin_dev_3ware_9700_char, dev_name, + strlen(lin_dev_3ware_9700_char))) + return missing_option("-d 3ware,N"); + // form /dev/twa* if (!strncmp(lin_dev_3ware_9000_char, dev_name, strlen(lin_dev_3ware_9000_char))) @@ -3122,7 +3137,9 @@ return 0; } - if (!strncmp(name, "/dev/twa", 8)) + if (!strncmp(name, "/dev/twl", 8)) + return new linux_escalade_device(this, name, linux_escalade_device::AMCC_3WARE_9700_CHAR, disknum); + else if (!strncmp(name, "/dev/twa", 8)) return new linux_escalade_device(this, name, linux_escalade_device::AMCC_3WARE_9000_CHAR, disknum); else if (!strncmp(name, "/dev/twe", 8)) return new linux_escalade_device(this, name, linux_escalade_device::AMCC_3WARE_678K_CHAR, disknum); Index: smartmontools-5.39.1+svn3124/smartctl.8.in =================================================================== --- smartmontools-5.39.1+svn3124.orig/smartctl.8.in 2010-06-11 18:21:25.000000000 +0200 +++ smartmontools-5.39.1+svn3124/smartctl.8.in 2010-12-23 11:05:12.103063859 +0100 @@ -65,7 +65,7 @@ \fB"/dev/sg*"\fP. For SATA disks accessed with libata, use \fB"/dev/sd[a\-z]"\fP and append \fB"\-d ata"\fP. For disks behind 3ware controllers you may need \fB"/dev/sd[a\-z]"\fP or -\fB"/dev/twe[0\-9]"\fP or \fB"/dev/twa[0\-9]"\fP: see details +\fB"/dev/twe[0\-9]"\fP, \fB"/dev/twa[0\-9]"\fP or \fB"/dev/twl[0\-9]"\fP: see details below. For disks behind HighPoint RocketRAID controllers you may need \fB"/dev/sd[a\-z]"\fP. For disks behind Areca SATA RAID controllers, you need \fB"/dev/sg[2\-9]"\fP (note that smartmontools interacts with @@ -303,6 +303,9 @@ .nf \fBsmartctl \-a \-d 3ware,1 /dev/twa0\fP .fi +.nf +\fBsmartctl \-a \-d 3ware,1 /dev/twl0\fP +.fi where in the argument \fI3ware,N\fP, the integer N is the disk number (3ware \'port\') within the 3ware ATA RAID controller. The allowed values of N are from 0 to 127 inclusive. The first two forms, which @@ -314,12 +317,17 @@ /dev/twa0\-15, must be used with 3ware 9000 series controllers, which use the 3w\-9xxx driver. -Note that if the special character device nodes /dev/twa? and -/dev/twe? do not exist, or exist with the incorrect major or minor +The devices /dev/twl0\-15 must be used with the 3ware/LSI 9750 series +controllers which use the 3w-sas driver. + +Note that if the special character device nodes /dev/twl?, /dev/twa? +and /dev/twe? do not exist, or exist with the incorrect major or minor numbers, smartctl will recreate them on the fly. Typically /dev/twa0 refers to the first 9000\-series controller, /dev/twa1 refers to the -second 9000 series controller, and so on. Likewise /dev/twe0 refers to -the first 6/7/8000\-series controller, /dev/twa1 refers to the second +second 9000 series controller, and so on. The /dev/twl0 devices refers +to the first 9750 series controller, /dev/twl1 resfers to the second +9750 series controller, and so on. Likewise /dev/twe0 refers to +the first 6/7/8000\-series controller, /dev/twe1 refers to the second 6/7/8000 series controller, and so on. Note that for the 6/7/8000 controllers, \fBany\fP of the physical @@ -354,7 +362,7 @@ instructions. Alternatively, use the character device /dev/twe0\-15 interface. The selective self\-test functions (\'\-t select,A\-B\') are only supported -using the character device interface /dev/twa0\-15 and /dev/twe0\-15. +using the character device interface /dev/twl0\-15, /dev/twa0\-15 and /dev/twe0\-15. The necessary WRITE LOG commands can not be passed through the SCSI interface. @@ -1688,8 +1696,14 @@ .nf .B smartctl \-a \-d 3ware,0 /dev/twa0 .fi -Examine all SMART data for the first ATA disk connected to a 3ware -RAID 9000 controller card. +Examine all SMART data for the first ATA disk connected to a +3ware RAID 9000 controller card. +.PP +.nf +.B smartctl \-a \-d 3ware,0 /dev/twl0 +.fi +Examine all SMART data for the first SATA (not SAS) disk connected to a +3ware RAID 9750 controller card. .PP .nf .B smartctl \-t short \-d 3ware,3 /dev/sdb Index: smartmontools-5.39.1+svn3124/smartd.8.in =================================================================== --- smartmontools-5.39.1+svn3124.orig/smartd.8.in 2010-12-23 11:00:15.000000000 +0100 +++ smartmontools-5.39.1+svn3124/smartd.8.in 2010-12-23 11:06:26.676860226 +0100 @@ -601,10 +601,17 @@ .B # .nf .B # Two ATA disks on a 3ware 9000 controller. -.B # Start long self-tests Sundays between midnight and +.B # Start long self-tests Sundays between midnight and .B # 1am and 2-3 am .B \ \ /dev/twa0 -d 3ware,0 -a -s L/../../7/00 .B \ \ /dev/twa0 -d 3ware,1 -a -s L/../../7/02 +.nf +.B # +.B # Two SATA (not SAS) disks on a 3ware 9750 controller. +.B # Start long self-tests Sundays between midnight and +.B # 1am and 2-3 am +.B \ \ /dev/twl0 -d 3ware,0 -a -s L/../../7/00 +.B \ \ /dev/twl0 -d 3ware,1 -a -s L/../../7/02 .B # .nf .B # Monitor 2 disks connected to the first HP SmartArray controller which @@ -703,11 +710,11 @@ status fails, or if new errors appear in the self-test log. .B If a 3ware controller is used -then the corresponding SCSI (/dev/sd?) or character device (/dev/twe? -or /dev/twa?) must be listed, along with the \'\-d 3ware,N\' Directive -(see below). The individual ATA disks hosted by the 3ware controller -appear to \fBsmartd\fP as normal ATA devices. Hence all the ATA -directives can be used for these disks (but see note below). +then the corresponding SCSI (/dev/sd?) or character device (/dev/twe?, +/dev/twa? or /dev/twl?) must be listed, along with the \'\-d 3ware,N\' +Directive (see below). The individual ATA disks hosted by the 3ware +controller appear to \fBsmartd\fP as normal ATA devices. Hence all +the ATA directives can be used for these disks (but see note below). .B If an Areca controller is used then the corresponding SCSI generic device (/dev/sg?) must be listed, @@ -791,11 +798,11 @@ ATA disks behind 3ware controllers may alternatively be accessed via a character device interface /dev/twe0-15 (3ware 6000/7000/8000 -controllers) and /dev/twa0-15 (3ware 9000 series controllers). Note -that the 9000 series controllers may \fBonly\fP be accessed using the -character device interface /dev/twa0-15 and not the SCSI device -interface /dev/sd?. Please see the \fBsmartctl\fP(8) man page for -further details. +controllers), /dev/twa0-15 (3ware 9000 series controllers) and +/dev/twl0-15 (3ware 9750 series controllers). Note that the 9000 series +controllers may \fBonly\fP be accessed using the character device +interface /dev/twa0-15 and not the SCSI device interface /dev/sd?. +Please see the \fBsmartctl\fP(8) man page for further details. Note that older 3w-xxxx drivers do not pass the \'Enable Autosave\' (\fB-S on\fP) and \'Enable Automatic Offline\' (\fB-o on\fP) commands @@ -806,8 +813,8 @@ patch to older versions. See \fBhttp://smartmontools.sourceforge.net/\fP for instructions. Alternatively use the character device interfaces /dev/twe0-15 (3ware -6/7/8000 series controllers) or /dev/twa0-15 (3ware 9000 series -controllers). +6/7/8000 series controllers), /dev/twa0-15 (3ware 9000 series +controllers) or /dev/twl0-15 (3ware 9750 series controllers). .I areca,N \- the device consists of one or more SATA disks connected to an Areca Index: smartmontools-5.39.1+svn3124/smartd.conf =================================================================== --- smartmontools-5.39.1+svn3124.orig/smartd.conf 2010-12-23 11:00:15.000000000 +0100 +++ smartmontools-5.39.1+svn3124/smartd.conf 2010-12-23 11:05:12.107063211 +0100 @@ -75,12 +75,18 @@ #/dev/sdc -d 3ware,2 -a -s L/../../7/03 #/dev/sdc -d 3ware,3 -a -s L/../../7/04 -# Monitor 2 ATA disks connected to a 3ware 9000 controller which uses -# the 3w-9xxx driver (Linux, FreeBSD). Start long self-tests Tuesdays +# Monitor 2 ATA disks connected to a 3ware 9000 controller which +# uses the 3w-9xxx driver (Linux, FreeBSD). Start long self-tests Tuesdays # between 1-2 and 3-4 am. #/dev/twa0 -d 3ware,0 -a -s L/../../2/01 #/dev/twa0 -d 3ware,1 -a -s L/../../2/03 +# Monitor 2 SATA (not SAS) disks connected to a 3ware 9000 controller which +# uses the 3w-sas driver (Linux, FreeBSD). Start long self-tests Tuesdays +# between 1-2 and 3-4 am. +#/dev/twl0 -d 3ware,0 -a -s L/../../2/01 +#/dev/twa0 -d 3ware,1 -a -s L/../../2/03 + # Same as above for Windows. Option '-d 3ware,N' is not necessary, # disk (port) number is specified in device name. # NOTE: On Windows, DEVICESCAN works also for 3ware controllers. Index: smartmontools-5.39.1+svn3124/smartd.conf.5.in =================================================================== --- smartmontools-5.39.1+svn3124.orig/smartd.conf.5.in 2010-12-23 11:00:15.000000000 +0100 +++ smartmontools-5.39.1+svn3124/smartd.conf.5.in 2010-12-23 11:07:46.278565643 +0100 @@ -177,12 +177,19 @@ .B # .nf .B # Two ATA disks on a 3ware 9000 controller. -.B # Start long self-tests Sundays between midnight and +.B # Start long self-tests Sundays between midnight and .B # 1am and 2-3 am .B \ \ /dev/twa0 -d 3ware,0 -a -s L/../../7/00 .B \ \ /dev/twa0 -d 3ware,1 -a -s L/../../7/02 .B # .nf +.B # Two SATA (not SAS) disks on a 3ware 9750 controller. +.B # Start long self-tests Sundays between midnight and +.B # 1am and 2-3 am +.B \ \ /dev/twl0 -d 3ware,0 -a -s L/../../7/00 +.B \ \ /dev/twl0 -d 3ware,1 -a -s L/../../7/02 +.B # +.nf .B # Monitor 2 disks connected to the first HP SmartArray controller which .B # uses the cciss driver. Start long tests on Sunday nights and short .B # self-tests every night and send errors to root @@ -279,11 +286,11 @@ status fails, or if new errors appear in the self-test log. .B If a 3ware controller is used -then the corresponding SCSI (/dev/sd?) or character device (/dev/twe? -or /dev/twa?) must be listed, along with the \'\-d 3ware,N\' Directive -(see below). The individual ATA disks hosted by the 3ware controller -appear to \fBsmartd\fP as normal ATA devices. Hence all the ATA -directives can be used for these disks (but see note below). +then the corresponding SCSI (/dev/sd?) or character device (/dev/twe?, +/dev/twa? or /dev/twl?) must be listed, along with the \'\-d 3ware,N\' +Directive (see below). The individual ATA disks hosted by the 3ware +controller appear to \fBsmartd\fP as normal ATA devices. Hence all +the ATA directives can be used for these disks (but see note below). .B If an Areca controller is used then the corresponding SCSI generic device (/dev/sg?) must be listed, @@ -367,11 +374,11 @@ ATA disks behind 3ware controllers may alternatively be accessed via a character device interface /dev/twe0-15 (3ware 6000/7000/8000 -controllers) and /dev/twa0-15 (3ware 9000 series controllers). Note -that the 9000 series controllers may \fBonly\fP be accessed using the -character device interface /dev/twa0-15 and not the SCSI device -interface /dev/sd?. Please see the \fBsmartctl\fP(8) man page for -further details. +controllers), /dev/twa0-15 (3ware 9000 series controllers) and +/dev/twl0-15 (3ware 9750 series controllers). Note that the 9000 series +controllers may \fBonly\fP be accessed using the character device +interface /dev/twa0-15 and not the SCSI device interface /dev/sd?. +Please see the \fBsmartctl\fP(8) man page for further details. Note that older 3w-xxxx drivers do not pass the \'Enable Autosave\' (\fB-S on\fP) and \'Enable Automatic Offline\' (\fB-o on\fP) commands @@ -382,8 +389,8 @@ patch to older versions. See \fBhttp://smartmontools.sourceforge.net/\fP for instructions. Alternatively use the character device interfaces /dev/twe0-15 (3ware -6/7/8000 series controllers) or /dev/twa0-15 (3ware 9000 series -controllers). +6/7/8000 series controllers), /dev/twa0-15 (3ware 9000 series +controllers) or /dev/twl0-15 (3ware 9750 series controllers). .I areca,N \- the device consists of one or more SATA disks connected to an Areca debian/patches/54_remove-Id-from-smartd.conf.diff0000644000000000000000000000067713323672272017004 0ustar Index: smartmontools/smartd.conf =================================================================== --- smartmontools.orig/smartd.conf 2013-09-05 13:32:14.371972459 +0200 +++ smartmontools/smartd.conf 2013-09-05 13:32:14.363972459 +0200 @@ -2,8 +2,6 @@ # Home page is: http://smartmontools.sourceforge.net -# $Id: smartd.conf 3651 2012-10-18 15:11:36Z samm2 $ - # smartd will re-read the configuration file if it receives a HUP # signal debian/patches/kfreebsd.patch0000644000000000000000000000170413323672272013434 0ustar --- a/dev_areca.h +++ b/dev_areca.h @@ -58,7 +58,7 @@ #define ARCMSR_IOCTL_CLEAR_RQBUFFER (ARECA_SATA_RAID | FUNCTION_CLEAR_RQBUFFER) #define ARCMSR_IOCTL_CLEAR_WQBUFFER (ARECA_SATA_RAID | FUNCTION_CLEAR_WQBUFFER) #define ARCMSR_IOCTL_RETURN_CODE_3F (ARECA_SATA_RAID | FUNCTION_RETURN_CODE_3F) -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #include // _IOWR /*FunctionCode*/ --- a/cciss.cpp +++ b/cciss.cpp @@ -18,18 +18,10 @@ # ifndef be32toh # define be32toh __be32_to_cpu # endif -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) # include # include CISS_LOCATION # define _HAVE_CCISS -#elif defined(__FreeBSD_kernel__) -# include -# ifdef __GLIBC__ -# include -# include -# endif -# include CISS_LOCATION -# define _HAVE_CCISS #endif #ifdef _HAVE_CCISS debian/patches/manpage.diff0000644000000000000000000000116213323672272013066 0ustar Fixed example path in man pages Index: smartmontools/smartd.conf.5.in =================================================================== --- smartmontools.orig/smartd.conf.5.in 2013-09-05 13:32:24.783972489 +0200 +++ smartmontools/smartd.conf.5.in 2013-09-05 13:32:24.775972489 +0200 @@ -1601,7 +1601,7 @@ .fi Some example scripts are distributed with the smartmontools package, -in /usr/local/share/doc/smartmontools/examplescripts/. +in /usr/local/share/doc/smartmontools/examples/. Please note that these scripts typically run as root, so any files that they read/write should not be writable by ordinary users or debian/patches/60_remove-redhatism.diff0000644000000000000000000000107313323672272015237 0ustar --- a/smartd.cpp +++ b/smartd.cpp @@ -1038,7 +1038,7 @@ static void MailWarning(const dev_config " NIS domain: %s\n\n" "The following warning/error was logged by the smartd daemon:\n\n" "%s\n\n" - "For details see host's SYSLOG (default: /var/log/messages).\n\n" + "For details see host's SYSLOG (default: /var/log/syslog).\n\n" "%s%s%s", hostname, domainname, nisdomain, message, further, original, additional); exportenv(environ_strings[10], "SMARTD_FULLMESSAGE", fullmessage); debian/patches/53_use-smartd-runner-by-default.diff0000644000000000000000000000115613323672272017415 0ustar Index: smartmontools/smartd.conf =================================================================== --- smartmontools.orig/smartd.conf 2013-09-05 13:32:11.471972451 +0200 +++ smartmontools/smartd.conf 2013-09-05 13:32:11.467972451 +0200 @@ -20,7 +20,7 @@ # Directives listed below, which will be applied to all devices that # are found. Most users should comment out DEVICESCAN and explicitly # list the devices that they wish to monitor. -DEVICESCAN +DEVICESCAN -n standby -m root -M exec /usr/share/smartmontools/smartd-runner # Alternative setting to ignore temperature and power-on hours reports # in syslog. debian/patches/series0000644000000000000000000000027413323672272012044 0ustar 52_remove-pragma.diff 53_use-smartd-runner-by-default.diff 54_remove-Id-from-smartd.conf.diff 61_cciss-doc.patch 63_removable.patch manpage.diff kfreebsd.patch curl-follow-redirects.patch debian/patches/61_cciss-doc.patch0000644000000000000000000000702213323672272014023 0ustar Author: Matt Taggart Subject: Update cciss examples/docs Here is a patch that adds examples for cciss to the default smartd.conf file and adds some more cciss documentation to the manpages. I think this patch gets things to parity with the 3ware documentation with a couple minor exceptions Index: smartmontools/smartd.8.in =================================================================== --- smartmontools.orig/smartd.8.in 2013-09-05 13:32:17.291972468 +0200 +++ smartmontools/smartd.8.in 2013-09-05 13:32:17.283972468 +0200 @@ -153,6 +153,10 @@ .SH OPTIONS +.B If a cciss controller is used +then the corresponding block device (/dev/cciss/c?d?) must be listed, +along with the \'\-d cciss,N\' Directive (see below). + .TP .B \-A PREFIX, \-\-attributelog=PREFIX Writes \fBsmartd\fP attribute information (normalized and raw Index: smartmontools/smartd.conf =================================================================== --- smartmontools.orig/smartd.conf 2013-09-05 13:32:17.291972468 +0200 +++ smartmontools/smartd.conf 2013-09-05 13:32:17.283972468 +0200 @@ -92,6 +92,12 @@ # NOTE: On Windows, DEVICESCAN works also for 3ware controllers. #/dev/hdc,0 -a -s L/../../2/01 #/dev/hdc,1 -a -s L/../../2/03 +# +# Monitor 2 disks connected to the first HP SmartArray controller which +# uses the cciss driver. Start long tests on Sunday nights and short +# self-tests every night and send errors to root +#/dev/cciss/c0d0 -d cciss,0 -a -s (L/../../7/02|S/../.././02) -m root +#/dev/cciss/c0d0 -d cciss,1 -a -s (L/../../7/03|S/../.././03) -m root # Monitor 3 ATA disks directly connected to a HighPoint RocketRAID. Start long # self-tests Sundays between 1-2, 2-3, and 3-4 am. Index: smartmontools/smartd.conf.5.in =================================================================== --- smartmontools.orig/smartd.conf.5.in 2013-09-05 13:32:17.291972468 +0200 +++ smartmontools/smartd.conf.5.in 2013-09-05 13:32:17.287972468 +0200 @@ -97,10 +97,11 @@ .B # This is an example smartd startup config file .B # /usr/local/etc/smartd.conf for monitoring three .B # ATA disks, three SCSI disks, six ATA disks -.B # behind two 3ware controllers, three SATA disks -.B # directly connected to the HighPoint Rocket- -.B # RAID controller, two SATA disks connected to -.B # the HighPoint RocketRAID controller via a pmport +.B # behind two 3ware controllers, two disks on a cciss +.B # controller, three SATA disks directly connected +.B # to the HighPoint Rocket-RAID controller, +.B # two SATA disks connected to the HighPoint +.B # RocketRAID controller via a pmport .B # device, four SATA disks connected to an Areca .B # RAID controller, and one SATA disk. .B # @@ -178,6 +179,13 @@ .\" %ENDIF OS FreeBSD .B # .nf +.B # Monitor 2 disks connected to the first HP SmartArray controller which +.B # uses the cciss driver. Start long tests on Sunday nights and short +.B # self-tests every night and send errors to root +.B \ \ /dev/cciss/c0d0 -d cciss,0 -a -s (L/../../7/02|S/../.././02) -m root +.B \ \ /dev/cciss/c0d0 -d cciss,1 -a -s (L/../../7/03|S/../.././03) -m root +.B # +.nf .B # Three SATA disks on a HighPoint RocketRAID controller. .B # Start short self-tests daily between 1-2, 2-3, and .B # 3-4 am. @@ -1497,6 +1505,9 @@ If you want more frequent information, use: .B -a. +.B If a cciss controller is used +then the corresponding block device (/dev/cciss/c?d?) must be listed, +along with the \'\-d cciss,N\' Directive (see below). .TP .B ADDITIONAL DETAILS ABOUT DEVICESCAN If a non-comment entry in the configuration file is the text debian/patches/52_remove-pragma.diff0000644000000000000000000000735713323672272014542 0ustar Index: smartmontools/atacmds.h =================================================================== --- smartmontools.orig/atacmds.h 2013-09-05 13:32:05.011972432 +0200 +++ smartmontools/atacmds.h 2013-09-05 13:32:05.007972432 +0200 @@ -125,7 +125,6 @@ // Needed parts of the ATA DRIVE IDENTIFY Structure. Those labeled // word* are NOT used. -#pragma pack(1) struct ata_identify_device { unsigned short words000_009[10]; unsigned char serial_no[20]; @@ -147,7 +146,6 @@ ASSERT_SIZEOF_STRUCT(ata_identify_device, 512); /* ata_smart_attribute is the vendor specific in SFF-8035 spec */ -#pragma pack(1) struct ata_smart_attribute { unsigned char id; // meaning of flag bits: see MACROS just below @@ -208,7 +206,6 @@ // Format of data returned by SMART READ DATA // Table 62 of T13/1699-D (ATA8-ACS) Revision 6a, September 2008 -#pragma pack(1) struct ata_smart_values { unsigned short int revnumber; struct ata_smart_attribute vendor_attributes [NUMBER_ATA_SMART_ATTRIBUTES]; @@ -241,7 +238,6 @@ */ /* Vendor attribute of SMART Threshold (compare to ata_smart_attribute above) */ -#pragma pack(1) struct ata_smart_threshold_entry { unsigned char id; unsigned char threshold; @@ -252,7 +248,6 @@ /* Format of Read SMART THreshold Command */ /* Compare to ata_smart_values above */ -#pragma pack(1) struct ata_smart_thresholds_pvt { unsigned short int revnumber; struct ata_smart_threshold_entry thres_entries[NUMBER_ATA_SMART_ATTRIBUTES]; @@ -264,7 +259,6 @@ // Table 42 of T13/1321D Rev 1 spec (Error Data Structure) -#pragma pack(1) struct ata_smart_errorlog_error_struct { unsigned char reserved; unsigned char error_register; @@ -283,7 +277,6 @@ // Table 41 of T13/1321D Rev 1 spec (Command Data Structure) -#pragma pack(1) struct ata_smart_errorlog_command_struct { unsigned char devicecontrolreg; unsigned char featuresreg; @@ -299,7 +292,6 @@ ASSERT_SIZEOF_STRUCT(ata_smart_errorlog_command_struct, 12); // Table 40 of T13/1321D Rev 1 spec (Error log data structure) -#pragma pack(1) struct ata_smart_errorlog_struct { struct ata_smart_errorlog_command_struct commands[5]; struct ata_smart_errorlog_error_struct error_struct; @@ -308,7 +300,6 @@ ASSERT_SIZEOF_STRUCT(ata_smart_errorlog_struct, 90); // Table 39 of T13/1321D Rev 1 spec (SMART error log sector) -#pragma pack(1) struct ata_smart_errorlog { unsigned char revnumber; unsigned char error_log_pointer; @@ -405,7 +396,6 @@ // Table 45 of T13/1321D Rev 1 spec (Self-test log descriptor entry) -#pragma pack(1) struct ata_smart_selftestlog_struct { unsigned char selftestnumber; // Sector number register unsigned char selfteststatus; @@ -418,7 +408,6 @@ ASSERT_SIZEOF_STRUCT(ata_smart_selftestlog_struct, 24); // Table 44 of T13/1321D Rev 1 spec (Self-test log data structure) -#pragma pack(1) struct ata_smart_selftestlog { unsigned short int revnumber; struct ata_smart_selftestlog_struct selftest_struct[21]; @@ -467,7 +456,6 @@ ASSERT_SIZEOF_STRUCT(ata_smart_extselftestlog, 512); // SMART LOG DIRECTORY Table 52 of T13/1532D Vol 1 Rev 1a -#pragma pack(1) struct ata_smart_log_entry { unsigned char numsectors; unsigned char reserved; @@ -475,7 +463,6 @@ #pragma pack() ASSERT_SIZEOF_STRUCT(ata_smart_log_entry, 2); -#pragma pack(1) struct ata_smart_log_directory { unsigned short int logversion; struct ata_smart_log_entry entry[255]; @@ -485,7 +472,6 @@ // SMART SELECTIVE SELF-TEST LOG Table 61 of T13/1532D Volume 1 // Revision 3 -#pragma pack(1) struct test_span { uint64_t start; uint64_t end; @@ -493,7 +479,6 @@ #pragma pack() ASSERT_SIZEOF_STRUCT(test_span, 16); -#pragma pack(1) struct ata_selective_self_test_log { unsigned short logversion; struct test_span span[5]; debian/patches/63_removable.patch0000644000000000000000000000155213323672272014134 0ustar Added the removable option by default. This indicates to smartd that it should continue if the device does not appear to be present when smartd is started. Closes: #406130 Index: smartmontools/smartd.conf =================================================================== --- smartmontools.orig/smartd.conf 2013-09-05 13:32:21.599972480 +0200 +++ smartmontools/smartd.conf 2013-09-05 13:32:21.591972480 +0200 @@ -18,7 +18,7 @@ # Directives listed below, which will be applied to all devices that # are found. Most users should comment out DEVICESCAN and explicitly # list the devices that they wish to monitor. -DEVICESCAN -n standby -m root -M exec /usr/share/smartmontools/smartd-runner +DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner # Alternative setting to ignore temperature and power-on hours reports # in syslog. debian/patches/curl-follow-redirects.patch0000644000000000000000000000163613323672272016102 0ustar Description: allow curl to follow redirects Author: Andreas Hasenack Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/smartmontools/+bug/1209085 Forwarded: no, script was dropped from Debian in later versions Last-Update: 2018-07-16 --- This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ diff --git a/update-smart-drivedb.in b/update-smart-drivedb.in index 1bd6395..0f64573 100644 --- a/update-smart-drivedb.in +++ b/update-smart-drivedb.in @@ -77,7 +77,7 @@ DOWNLOAD= for t in $os_dltools; do if which $t >/dev/null 2>/dev/null; then case $t in - curl) DOWNLOAD="curl ${q:+-s }"'-f -o "$DEST.new" "$SRC"' ;; + curl) DOWNLOAD="curl ${q:+-s }"'-f -L -o "$DEST.new" "$SRC"' ;; lynx) DOWNLOAD='lynx -source "$SRC" >"$DEST.new"' ;; wget) DOWNLOAD="wget $q"'-O "$DEST.new" "$SRC"' ;; fetch) DOWNLOAD='fetch -o "$DEST.new" "$SRC"' ;; # FreeBSD debian/changelog0000644000000000000000000007047113323672272011060 0ustar smartmontools (6.2+svn3841-1.2ubuntu0.1) trusty; urgency=medium * d/p/curl-follow-redirects.patch: allow curl to follow redirects (LP: #1209085) -- Andreas Hasenack Mon, 16 Jul 2018 16:10:08 -0300 smartmontools (6.2+svn3841-1.2) unstable; urgency=medium * Non-maintainer upload. * debian/control: Switch to automake1.11. (Closes: #724436) -- Eric Dorland Sun, 16 Feb 2014 16:27:11 -0500 smartmontools (6.2+svn3841-1.1) unstable; urgency=medium * Non-maintainer upload. * Fix FTBFS on GNU/kFreeBSD. (Closes: #736660) -- Robert Millan Thu, 06 Feb 2014 13:48:48 +0100 smartmontools (6.2+svn3841-1) unstable; urgency=low * [3d17a85] Imported Upstream version 6.2+svn3841 * [8251afb] Fix FTBFS[kfreebsd] Thanks to Christoph Egger (Closes: #717567) * [e57fafb] Refreshed patches -- Giuseppe Iuculano Thu, 05 Sep 2013 14:53:36 +0200 smartmontools (6.1+svn3812-1) unstable; urgency=low * [ee38a43] Imported Upstream version 6.1+svn3812 (Closes: #691646) - Support for WD MyBook Essential 0x1058:0x0910 (Closes: #633724) - Added USB bridge to known IDs (Closes: #643928) - Added support for Seagate Expansion Desk external (usb) disks (Closes: #621411) * [1855d63] Refreshed patches and removed patches applied upstream * [d3fc9d1] Remove quilt from depends * [841c1a8] CHANGELOG file has been renamed, install Changelog * [3502e16] Updated VCS control fields * [8f14e44] debian/rules: Provide build-arch and build-indep * [0f1c16c] Harden smartmontools binaries * [555346e] Bump to 3.9.4 standards version * [5ae3fa9] Use /var/lib/smartmontools/drivedb for drivedb.h updates (Closes: #706909) * [c16ffdc] Create /var/lib/smartmontools/drivedb dir * [79a3dc2] Trigger the removal of /etc/init.d/smartd when upgrading (Closes: #684617, #704081) * [a0a5725] Also remove /etc/init.d/smartd in preinst script * [a26a490] Added man page for update-smart-drivedb. Thanks to Hannes von Haugwitz (Closes: #708433) -- Giuseppe Iuculano Sun, 02 Jun 2013 11:14:02 +0200 smartmontools (5.42+svn3561-3) unstable; urgency=high * [f10872d] Really fix FTBFS on kfreebsd. Thanks to Petr Salinger (Closes: #677393) -- Giuseppe Iuculano Mon, 16 Jul 2012 15:21:56 +0200 smartmontools (5.42+svn3561-2) unstable; urgency=high * [743e0f4] Fixed FTBFS in kfreebsd. Thanks to Petr Salinger (Closes: #677393) -- Giuseppe Iuculano Mon, 16 Jul 2012 12:06:15 +0200 smartmontools (5.42+svn3561-1) unstable; urgency=low * [f4e463d] Imported Upstream version 5.42+svn3561 * [23f7a2f] Refreshed patches * [16216c8] Fixed FTBFS on kfreebsd. Thanks to Petr Salinger (Closes: #676142) * [6652700] Fixed regression introduced in 10mail script (Closes: #649515) * [fd647e5] Remove /etc/init.d/smartd (Closes: #677095) -- Giuseppe Iuculano Wed, 20 Jun 2012 16:36:24 +0200 smartmontools (5.42+svn3539-1) unstable; urgency=low * [e165493] Imported Upstream version 5.42+svn3539 (Closes: #668391, #608953) * [9fcd449] Refreshed patches * [65c801f] Do not install upstream init (Closes: #631075) * [9a19418] Fixed check for /usr/bin/mail. Thanks to Martin von Gagern (Closes: #649515) -- Giuseppe Iuculano Sat, 12 May 2012 13:02:49 +0200 smartmontools (5.41+svn3365-1) unstable; urgency=low * [a7e8ffe] Imported Upstream version 5.41+svn3365 * [471d14a] Refreshed patches, removed install.diff applied upstream * [fae0ec9] Added a missing include for hurd-i386. Thanks to Pino Toscano (Closes: #619208) -- Giuseppe Iuculano Sun, 19 Jun 2011 17:28:10 +0200 smartmontools (5.40+svn3296-1) unstable; urgency=low * [cfbba5b] Imported Upstream version 5.40+svn3296 - Intel X18-M/X25-M/X25-V G2 SSDs: Add firmware bug warning (Closes: #581996) - handles missing attributes and prints attributes of SandForce based SSDs correctly (Closes: #601258) - Added a note about smartctl is unable to print a warning if autosave is disabled (Closes: 570892) - Print help message if no option is specified (Closes: 435579) - Only some of the controller specific parts of the code may still use the old ioctl (LP: #658469) - New drive database entry for F4EG (LP: #684809) * [b5b85ba] Refreshed patches * [2b7f0f1] Update to Standards-Version 3.9.1, no changes needed * [3ed7206] debian/rules: remove make -C examplescripts * [f8250f3] Pass exampledir in configure * [0711e68] Install examples files and update-smart-drivedb (Closes: #607689) (Closes: #593502) * [f36e375] Do not install CHANGELOG COPYING INSTALL and initd files * [a76819a] Re-enabled capability-dropping on armel (Closes: #552044) -- Giuseppe Iuculano Sun, 20 Mar 2011 19:09:39 +0100 smartmontools (5.39.1+svn3124-2) unstable; urgency=low [ Florian Weimer ] * [88b6d44] 3w-sas support (from upstream changeset r3128) (Closes: #604016) -- Giuseppe Iuculano Sun, 26 Dec 2010 12:26:16 +0100 smartmontools (5.39.1+svn3124-1) unstable; urgency=low * [1e46e09] Set state and attribute file directory to /var/lib/smartmontools/ (Closes: #582158) * [e20147c] Don't warn about being disabled unless verbose (Closes: #583386) * [3390c07] Fixed example path in man pages (Closes: #588134) * [e9583e0] Imported Upstream version 5.39.1+svn3124 * [789e123] Refreshed patches * [cbecf14] Bump to Standards-Version 3.9.0, no changes needed -- Giuseppe Iuculano Tue, 13 Jul 2010 13:16:54 +0200 smartmontools (5.39.1+svn3077-1) unstable; urgency=low * [ffe62ea] Removed powersaved from Suggests (Closes: #570956) * [7f0798e] Imported Upstream version 5.39.1+svn3077 (Closes: #575435) * [b1b3452] Enabled drivedb, savestates, and attributelog * [9f28fd4] Switch to dpkg-source 3.0 (quilt) format * [52be6ce] Updated to Standards-Version 3.8.4, no changes needed -- Giuseppe Iuculano Fri, 26 Mar 2010 22:01:58 +0100 smartmontools (5.39.1+svn3060-1) unstable; urgency=low * [a23d511] Imported Upstream version 5.39.1+svn3060 - A regression caused by capabilities was fixed. (Closes: #564876) * [89c9890] Removed patches merged in upstream -- Giuseppe Iuculano Thu, 04 Feb 2010 08:16:37 +0100 smartmontools (5.39-3) unstable; urgency=low * [3d32778] Fixed quietmode option (Closes: #545784) * [e66f4fd] Allow smartd 'DEVICESCAN -d sat' (Closes: #546566) -- Giuseppe Iuculano Fri, 22 Jan 2010 20:02:53 +0100 smartmontools (5.39-2) unstable; urgency=low * [f7f4c51] Fixed crash on kfreebsd. (Closes: #561113) - thanks to Petr Salinger and Axel Beckert -- Giuseppe Iuculano Sat, 26 Dec 2009 11:11:58 +0100 smartmontools (5.39-1) unstable; urgency=low * [e9e8c2b] Imported Upstream version 5.39 * [b00706e] Adeed libusb2-dev for kfreebsd in Build-Depends. (Closes: #560241) -- Giuseppe Iuculano Mon, 14 Dec 2009 12:24:35 +0100 smartmontools (5.38+svn2993-1) unstable; urgency=low * [bed9426] Imported Upstream version 5.38+svn2993 * [4a5d1d1] Fixed status action in init script (LP: #491324) * [9dd2a1d] Add selinux for avr32 in build-depends * [26ec4bc] Refreshed patches -- Giuseppe Iuculano Wed, 09 Dec 2009 17:45:19 +0100 smartmontools (5.38+svn2956-1) unstable; urgency=low * [283f281] Updated my email address and removed DM-Upload-Allowed control field * [eb07ddf] Imported Upstream version 5.38+svn2956 + Added a note in smartctl (8) about 2^16 wrap of LifeTime value in Self-test log. (Closes: #535298) * [ed382e8] Refreshed patches * [f4ff277] Updated lowcap patch, make capabilities optional and clarify that mail notification could not work when used. (Closes: #544940) * [a7e19a3] Do not Build-depends in libcap-ng-dev in armel, libcap-ng is broken in this arch. (Closes: #548438) -- Giuseppe Iuculano Sun, 11 Oct 2009 09:42:47 +0200 smartmontools (5.38+svn2920-2) unstable; urgency=low * [a117ede] Enable Selinux only in linux platforms -- Giuseppe Iuculano Tue, 22 Sep 2009 13:22:39 +0200 smartmontools (5.38+svn2920-1) unstable; urgency=low * [a94eb83] run.d/10mail: Do not exit silently if /usr/bin/mail is missing (Closes: #541192) - thanks to Francesco Potorti` * [0197215] Enabled SELinux support * [091eb3a] debian/smartmontools-bug: Fixed a spelling error (Closes: #547197) - thanks to Sandro Tosi * [5496574] Imported Upstream version 5.38+svn2920 * [5d593fa] Removed patches merged in upstream: 64_r2898.patch, 65_freebsd.patch -- Giuseppe Iuculano Sun, 20 Sep 2009 14:51:52 +0200 smartmontools (5.38+svn2879-4) unstable; urgency=low * [af11f9b] debian/patches/65_freebsd.patch: The os_freebsd.cpp uses reallocf(), which is specific for *BSD libc. Added an implementation directly into os_freebsd.cpp - thanks to Petr Salinger * [b2a680f] debian/watch: Removed uupdate * [4fe54cf] Do not Build-depends on libcap-ng-dev on avr32 -- Giuseppe Iuculano Mon, 07 Sep 2009 20:55:53 +0200 smartmontools (5.38+svn2879-3) unstable; urgency=low * [1b75411] Freebsd patch was not entirely merged in upstream. Applied remaining changes and try to fix FTBFS on GNU/kFreeBSD (Closes: #537856) -- Giuseppe Iuculano Mon, 07 Sep 2009 15:33:34 +0200 smartmontools (5.38+svn2879-2) unstable; urgency=low * [51c0fd9] Build-depends on libcap-ng-dev only on linux. - thanks to Petr Salinger * [94843b0] Fixed Vcs-Browser field * [c2d3bf4] Do not Build-depends on libcap-ng-dev on sparc * [27a32a3] Dereference '/dev/disk/by-*/*' symlink before device type autodetection. (Closes: #544823) -- Giuseppe Iuculano Mon, 07 Sep 2009 14:24:17 +0200 smartmontools (5.38+svn2879-1) unstable; urgency=low [ Guido Günther ] * [d5c8d71] suggest graphical helpers (Closes: #524752) * [b11b96e] support status action in init script (Closes: #525196) - thanks to Peter Eisentraut * [b092558] fix Vcs-Browser URL [ Giuseppe Iuculano ] * [101b745] New maintainers, thanks to Guido Günther for the prior work on smartmontools. (Closes: #543861) * [35bece3] debian/rules: Added a get-orig-source target to retrieve a svn snapshot * [4482c05] Bump to debhelper 7 compatibility levels * [2127e19] Imported Upstream version 5.38+svn2879 - Fixed FTBFS (Closes: #539430) - GNU/kFreeBSD patches merged in upstream (Closes: #537856) - More drives recognized: Fujitsu MHW2 BJ series, WD Caviar Black family, Western Digital AV-GP series, Transcend Solid-State Drive and Transcend Solid-State Drive V series, Seagate Momentus 5400.5 series. * [6052436] Refreshed patches * [91ad575] move badblockhowto.html in debian/ (Closes: #538631) * [bbdf8c9] debian/control: Depend on lsb >= 3.2-14, which has the status_of_proc() function. * [9afe5af] Removed stop links from rc0 and rc6 (Closes: #494951) - thanks to James Westby * [6dcd8ec] Updated to standards version 3.8.3 (No changes needed) * [608687b] debian/rules: Use dh_prep instead of dh_clean -k * [a52f90d] debian/rules: Do not ignore make clean errors * [31e40f7] debian/rules: use dh_install to install files * [9ca7a79] debian/control: Added Florian Maier in Uploaders, fixed VCS field, added DM-Upload-Allowed field * [d494f00] Updated debian/badblockhowto.html (Closes: #540359) - thanks to Francesco Potorti` * [3db595a] Use the `-n standby' option by default in smartd.conf (Closes: #531325) * [52b4501] Added /etc/smartmontools/run.d/10powersave-notify to enable desktop notification over powersave-notify and added powersaved in Recommends * [0dcf301] debian/patches/62_lowcap.patch: Drop all unnecessary capabilities * [5afdd10] Added the removable option by default. This indicates to smartd that it should continue if the device does not appear to be present when smartd is started. (Closes: #406130) -- Giuseppe Iuculano Tue, 01 Sep 2009 12:59:13 +0200 smartmontools (5.38-3) unstable; urgency=low * [3ea288e] add Homepage, Vcs-{Git,Browser} fields (Closes: #500530) * [76a9163] check if daemon is running befor starting it (Closes: #516430) * [8a3e8a3] fix maintainer name -- Guido Günther Sat, 21 Feb 2009 17:19:19 +0100 smartmontools (5.38-2) unstable; urgency=low * [fd9c675] add lintian override Full stop at end of synopsis is OK - it doesn't end a sentence but is part of an abbreviation. * [fab76b4] update copyright * [1731d9e] bump standards version * [d0f2f2e] add README.source * [2d3e4b9] new patch 61_cciss-doc.patch update ccis examples/docs (Closes: #488371) - thanks to Matt Taggart -- Guido Guenther Thu, 24 Jul 2008 12:15:34 -0400 smartmontools (5.38-1) unstable; urgency=low * new upstream version * drop 51_add-kfreebsd-support.diff, applied upstream * add watch file from dehs.debian.org -- Guido Guenther Tue, 11 Mar 2008 20:54:41 +0100 smartmontools (5.38~rc0-2) unstable; urgency=low [ Petter Reinholdtsen ] * smartmontools: Problem with LSB header in init.d script (Closes: Bug#469377) -- Guido Guenther Wed, 05 Mar 2008 08:55:46 +0100 smartmontools (5.38~rc0-1) unstable; urgency=low * New Upstream Version release candidate * detects Hitachi drives with newer kernels (Closes: #314629) * updated drives table (Closes: #381251) * correct logfile location (Closes: #464193) * drop 01_sat-error-handling.diff - originally pulld from upstream * drop 05_wait-for-daemon-startup.diff - applied upstream * refresh 51_add-kfreebsd-support.diff * bump standards version * ship badblockshowto.html (Closes: #454565) -- Guido Guenther Tue, 26 Feb 2008 11:59:50 +0100 smartmontools (5.38~cvs20071118-2) experimental; urgency=low * add LSB header (Closes: #458391) * move debian specific patches to >= 50 * pull 01_sat-error-handling.diff from upstream CVS to improve SAT handling of aborted ATA commands - thanks to Doug Gilbert! -- Guido Guenther Sun, 09 Dec 2007 14:51:57 +0100 smartmontools (5.38~cvs20071118-1) experimental; urgency=low * new upstream CVS snapshot 20071118 * update patches: * rework 01_add-kfreebsd-support.diff to apply again * rework 05_wait-for-daemon-startup.diff to apply again * rediff 10_remove-redhatism.diff * drop 20_fix-scsi-disk-detection.diff - merged upstream * drop 30_gcc4.3.diff - fixed upstream * drop 40_fix-sata-hsm-violation.diff - pulled from upstream -- Guido Guenther Mon, 19 Nov 2007 13:54:42 +0100 smartmontools (5.37-6) unstable; urgency=low * don't redefine CISS_MAX_LUN (Closes: #441598) * Patch pulled from upstream to fix HSM violation errors on SATA systems (Closes: #448781) - thanks to Sven Hartge for sorting this out -- Guido Guenther Thu, 01 Nov 2007 13:29:11 +0100 smartmontools (5.37-5) unstable; urgency=low * NEWS.Debian: SCSI disks need -W for temperature logging, thanks to GSR for feedback and testing. (Closes: #411932) -- Guido Guenther Thu, 05 Apr 2007 10:15:52 +0200 smartmontools (5.37-4) unstable; urgency=low * 05_wait-for-daemon-startup.diff: fix startup race condition (Closes: #246032) * document good testing practice (Closes: #412543) -- Guido Guenther Sat, 31 Mar 2007 16:01:27 +0200 smartmontools (5.37-3) unstable; urgency=low * rebuild with pbuilder (Closes: #415950) -- Guido Guenther Fri, 23 Mar 2007 13:51:43 +0100 smartmontools (5.37-2) unstable; urgency=low * switch from dpatch to quilt * 20_fix-scsi-disk-detection.diff: patch from Douglas Gilbert to fix scsi disk detection (Closes: #411932) -- Guido Guenther Mon, 19 Mar 2007 23:04:15 +0100 smartmontools (5.37-1) unstable; urgency=low * New Upstream Version * adjusted 04_remove-Id-from-smartd.conf.dpatch -- Guido Guenther Thu, 21 Dec 2006 13:12:26 +0100 smartmontools (5.37~cvs20061111-1) experimental; urgency=low * The No Narro ihr Mäschkerle release * New upstream cvs release candidate (Closes: #398055, #398054, #391999) * dropped 60_cciss.dpatch, merged upstream * adjusted 04_remove-Id-from-smartd.conf.dpatch -- Guido Guenther Sat, 11 Nov 2006 19:19:27 +0100 smartmontools (5.37~cvs20061002-1) experimental; urgency=low * New upstream CVS release candidate * adjusted patches: 60_cciss, 04_remove-Id-from-smartd.conf -- Guido Guenther Mon, 2 Oct 2006 17:45:51 +0200 smartmontools (5.36-8) unstable; urgency=low * 60_cciss (smartd.c): make sure we pass the correct mode and device parameters to the lower level functions (the code assumed "SCSI" in those places although it was "CCISS"). Patch by Frédéric BOITEUX , thanks a lot! (Closes: #36802) -- Guido Guenther Fri, 29 Sep 2006 15:22:19 +0200 smartmontools (5.36-7) unstable; urgency=low * README.Debian: actually mention the term "smartd-runner" in README.Debian instead of only explaining what it does * /etc/init.d/smartmontools: use LSB logging, patch by David Härdeman (Closes: #385903) * Bump standards version to 3.7.2 (no other changes necessary) -- Guido Guenther Mon, 25 Sep 2006 11:41:21 +0200 smartmontools (5.36-6) unstable; urgency=low * Explicitly discourage using enable_smart with SATA disks in README.Debian (Closes: #365027) - many thanks to Francois Marier and Doug Gilbert for their feedback and help. * Document what smartd-runner really does (Closes: #352244) -- Guido Guenther Wed, 3 May 2006 21:44:01 +0200 smartmontools (5.36-5) unstable; urgency=low * apply current version of the cciss patch, updated to be less intrusive by Douglas Gilbert -- Guido Guenther Wed, 26 Apr 2006 23:10:07 +0200 smartmontools (5.36-4) unstable; urgency=low * really apply the cciss patch, thanks again to Frederic Boiteux * adjust the cciss patch to include instead of "cciss.h", we don't ship a local copy. -- Guido Guenther Tue, 25 Apr 2006 13:54:17 +0200 smartmontools (5.36-3) unstable; urgency=low * depend on debianutils (>= 2.2) for run-parts --lsbsysinit, thanks to Frederic Boiteux (Closes: #364713) -- Guido Guenther Tue, 25 Apr 2006 10:59:37 +0200 smartmontools (5.36-2) unstable; urgency=low * Build depend on automake/autoconf since we run autogen.sh from debian/rules -- Guido Guenther Mon, 24 Apr 2006 16:02:42 +0200 smartmontools (5.36-1) unstable; urgency=low * new upstream version (Closes: #363087) * use dpatch * bump standards version * update cciss patch -- Guido Guenther Mon, 24 Apr 2006 14:39:19 +0200 smartmontools (5.33+5.34cvs20050802-6) experimental; urgency=low * update cciss patch to also support smartd not only smartctl -- Guido Guenther Thu, 13 Apr 2006 09:34:39 +0200 smartmontools (5.33+5.34cvs20050802-5) experimental; urgency=low * add (experimental) cciss patch by Praveen Chidambaram , with slight modfifications to apply and work with current CVS * Build depend on libcam-dev for kfreebsd-amd64 too (Closes: #361478) * Remove $Id$ from smartd.conf (Closes: #324703) -- Guido Guenther Mon, 10 Apr 2006 17:33:18 +0200 smartmontools (5.33+5.34cvs20050802-4) unstable; urgency=low * avoid usage of cat in 10mail (Closes: #327338) * add patch by Aurelin Jano to build on kfreebsd (Closes: #327642) -- Guido Guenther Tue, 24 Jan 2006 09:56:28 +0100 smartmontools (5.33+5.34cvs20050802-3) unstable; urgency=low * add note about 3ware raid controlers to NEWS.Debian (Closes: #322265) -- Guido Guenther Thu, 11 Aug 2005 11:04:56 +0200 smartmontools (5.33+5.34cvs20050802-2) unstable; urgency=low * rules: make ./configure executable (Closes: #321060) * smartd.conf: add smartd-runner to the default DEVICESCAN directive * README.Debian: mention smartd-runner * control: remove debianutils, it's an essential package -- Guido Guenther Wed, 3 Aug 2005 11:32:53 +0200 smartmontools (5.33+5.34cvs20050802-1) unstable; urgency=low * New CVS snapshot as of 2005-08-02 (Closes: #269051) * added smartd-runner which runs scripts in /etc/smartmontools/run.d * added /etc/smartmontools/run.d/10mail to emulate smartd's -m option * add a comment on howto use this to /etc/smartd.conf * Many thanks for this go to Brian Sutherland -- Guido Guenther Tue, 2 Aug 2005 20:58:47 +0200 smartmontools (5.33-1) experimental; urgency=low * new upstream version * upload to experimental since we want 5.32 in sarge for now -- Guido Guenther Sat, 20 Nov 2004 19:52:39 +0100 smartmontools (5.32-2) unstable; urgency=medium * urgency medium since the sarge version is unusable on arm * use __attribute__((packed)) instead of #pragma(packed) since the later causes alignment problems on arm - based on a patch by armcc@lycos.com, many thanks! (Closes: #278459) * simplify /usr/share/bug/smartmontools a bit (Closes: #262055) -- Guido Guenther Thu, 28 Oct 2004 09:20:57 +0200 smartmontools (5.32-1) unstable; urgency=low * new upstream version -- Guido Guenther Mon, 19 Jul 2004 10:57:53 +0200 smartmontools (5.30-6) unstable; urgency=low * be more verbose in /etc/init.d/smartmontools iff smartd has been disabled via /etc/default/smartmontools (Closes: #246615) * explain removal of cron selftests in NEWS.Debian (Closes: #247622) -- Guido Guenther Thu, 6 May 2004 09:05:40 +0200 smartmontools (5.30-5) unstable; urgency=low * rm selftests from CVS, so they don't get picked up by cvs-buildpackage (Closes: #242580), sigh * thanks again to Jean-Luc Coulon and Bruce Allen for resolving #208964 -- Guido Guenther Wed, 7 Apr 2004 19:07:58 +0200 smartmontools (5.30-4) unstable; urgency=low * improve restart in init.d script so that smartd can shut down properly (Closes: #242344) * remove cron selftests at all, use smartd's -s option instead -- Guido Guenther Tue, 6 Apr 2004 12:18:52 +0200 smartmontools (5.30-3) unstable; urgency=low * deprecated cron selftests, this is now better handled by smartd's "-s" option * check for existence of smartmontools-selftests in cron.d snippet * in accordance with upstream (who adopted our naming scheme) use smartd's compiled in default values in /etc/default/smartmontools -- Guido Guenther Sat, 27 Mar 2004 07:11:12 +0100 smartmontools (5.30-2) unstable; urgency=low * clarify usage of enable_smart in (Closes: #239737) * add reload to /etc/init.d/smartmontools -- Guido Guenther Thu, 25 Mar 2004 14:43:33 +0100 smartmontools (5.30-1) unstable; urgency=low * new upstream version (Closes: #238790) * logging severity fixed upstream (Closes: #234519) -- Guido Guenther Tue, 23 Mar 2004 00:40:25 +0100 smartmontools (5.26-5) unstable; urgency=low * install /u/s/bug/smartmontools as reportbug helper * use install instead of cp/chmod * remove no longer needed debian/dirs -- Guido Guenther Wed, 11 Feb 2004 19:08:49 +0100 smartmontools (5.26-4) unstable; urgency=low * remove sections not relevant on debian systems from smartd.8.in manpage * include /etc/smartd.conf again, thanks Wolfram Quester. * change smartd.conf to only use DEVICESCAN -- Guido Guenther Tue, 3 Feb 2004 15:25:32 +0100 smartmontools (5.26-3) unstable; urgency=low * The "where did the chmod go" release * make sure selftests is executable (Closes: #223627) -- Guido Guenther Thu, 11 Dec 2003 12:33:56 +0100 smartmontools (5.26-2) unstable; urgency=low * actually include /usr/share/smartmontools/selftests again -- Guido Guenther Tue, 9 Dec 2003 12:45:22 +0100 smartmontools (5.26-1) unstable; urgency=low * new upstream version -- Guido Guenther Fri, 5 Dec 2003 22:12:33 +0100 smartmontools (5.1.18-3) unstable; urgency=low * make sure /usr/share/smartmontools/selftests is executable -- Guido Guenther Wed, 12 Nov 2003 01:08:20 +0100 smartmontools (5.1.18-2) unstable; urgency=low * Conflict: ucsc-smartsuite (Closes: #218573) * introduce run_cron_selftests in /etc/defaults/smartmontools which contains a list of devices to run regular selftests on via cron -- Guido Guenther Mon, 3 Nov 2003 22:36:34 +0100 smartmontools (5.1.18-1) unstable; urgency=low * new upstream version * bump Standards-Version to 3.6.1 -- Guido Guenther Thu, 28 Aug 2003 21:54:06 +0200 smartmontools (5.1.16-1) unstable; urgency=low * new upstream version - log normal exit at LOG_INFO, not LOG_CRIT (Closes: #201173) - allows to acces disks behind 3ware RAID controllers, maybe closes: #188515, the submitter never specified any details. * bump Standards-Version to 3.6.0 * add NEWS.Debian file -- Guido Guenther Thu, 7 Aug 2003 13:54:26 +0200 smartmontools (5.1.14-1) unstable; urgency=low * new upstream version * fix the regexp in smartmontools-cron matching the first disk only * bump Standards-Version to 3.5.10 -- Guido Guenther Sun, 22 Jun 2003 14:07:11 +0200 smartmontools (5.1.11-1) unstable; urgency=low * new upstream version (Closes: #191831) * rework debian/rules since we can now pass most of the needed options to the Makefile -- Guido Guenther Wed, 7 May 2003 21:43:53 +0200 smartmontools (5.1.10-1) unstable; urgency=low * new upstream version (Closes: #186213) * add ${misc:Depends} to control file * bump debhelper Build-Depends to >=4 * bump Standards-Version to 3.5.9 * smartd now writes a pidfile, use it in the init script * add smartd_opts to /etc/defaults/smartmontools * add cron.daily example -- Guido Guenther Mon, 21 Apr 2003 19:32:46 +0200 smartmontools (5.1.9-3) unstable; urgency=low * init.d script prints more sensible error messages (Closes: #187697) -- Guido Guenther Sat, 5 Apr 2003 19:17:43 +0200 smartmontools (5.1.9-2) unstable; urgency=low * /etc/init.d/smartmontools cleanup: - Don't fail when the package was removed but not purged (Closes: #186091). - sleep 1 second on restart - fix wrong scriptname in usage output * install smartd.conf to /etc * adjust README.Debian * don't install CHANGELOG, dh_installchangelogs handles this for us -- Guido Guenther Mon, 24 Mar 2003 19:24:53 +0100 smartmontools (5.1.9-1) unstable; urgency=low * new upstream version (Closes: #178151) * Recommends: mailx | mailutils (Closes: #184890) * add '-e' to shebang line of init script * use debian/compat not DH_COMPAT -- Guido Guenther Sat, 15 Mar 2003 12:40:04 +0100 smartmontools (5.1.4-2) unstable; urgency=low * remove 'function' bashism from initscript (Closes: #178411), Thanks Martin Waitz. -- Guido Guenther Sun, 26 Jan 2003 00:52:49 +0100 smartmontools (5.1.4-1) unstable; urgency=low * new upstream version * turn on S.M.A.R.T. for devices listed in enable_smart * honor DEB_BUILD_OPTIONS * bump standards version to 3.5.8 -- Guido Guenther Sat, 25 Jan 2003 19:40:14 +0100 smartmontools (5.1.1-3) unstable; urgency=low * conflict with smartsuite (Closes: #178010) * remove superflous whitespaces in description * remove usr/bin from debian/dirs -- Guido Guenther Fri, 24 Jan 2003 00:51:26 +0100 smartmontools (5.1.1-2) unstable; urgency=low * only start smartd if start_smartd=yes in /etc/default/smartmontools. * initial upload (Closes: #174828). -- Guido Guenther Fri, 17 Jan 2003 23:04:50 +0000 smartmontools (5.1.1-1) unstable; urgency=low * Initial Release. -- Guido Guenther Tue, 14 Jan 2003 12:58:00 +0000