Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 7338
  • Last Modified:

How to get hard disk sector size in Linux?

Hello!

I would like to write to disk in atomic way to support transactions. To achive this, I have to write to disk in portions equal to the size of disk sector size. The problem is that it is srangely difficult to obtain the disk sector size in Linux. In Windows I use GetDiskFreeSpace call which returns me "bytes per sector" value. As I understand, for modern hard drivers (ATA and may be SCSI, I'm not sure) disk sector size is equal to 512bytes... But anyway, I'd like to be sure and ask Linux/device/controller/whatevery-you-want, but I don't know how to do it

Thanks for attention to my question,
Foma
0
Foma
Asked:
Foma
2 Solutions
 
jlevieCommented:
You can work out what it is from what's returned by an HDIO_GET_IDENTITY ioctl(). See /usr/include/linux/hdreg.h.

Are you going to be writing directly to the disk (no file system)? It seems to me that's the only time that the sector size would be meaningful.
0
 
mtmikeCommented:
You can also use the BLKSSZGET ioctl which works on any block device. It returns the hardware sector  size. Available in kernel 2.4 and 2.6 (linux/fs.h).

Note that writing single sectors does not really guarantee atomicity. The disk driver is still free to reorder writes. You will have to write synchronously either by passing the O_SYNC flag to open() or by using fsync().

If you are writing to a file system (instead of directly to disk) then logical file blocks may not correspond to physical disk blocks.
0
 
FomaAuthor Commented:
Thank you jlevie, thank you mtmike for responses.

BLKSSZGET ioctl fully fits my requirements. I’ve written a test program and it works fine. HDIO_GET_IDENTITY ioctl gives lots of information and can be useful too.

Concerning my task. I’m writing to disk using file system, but it doesn’t make sense because using portions of data equal to sector size, which are properly aligned I get atomicity of writes (with the one exception noted below). And of course, I use open with O_SYNC flag.

>Note that writing single sectors does not really guarantee atomicity. The disk driver is still free to reorder writes
Yes, modern hard disks are tooooo ‘smart’. As far as I know, this is the reason why SQL Server 7.0, for example, cannot _guarantee_ recovery in all cases on standard hardware. And we have to live with it… For critical tasks we have to use hard disks, which are capable of writing to disk everything they have in buffers in case of power off. And use RAID to save our data in case of disk breakage.
0

Featured Post

NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now