Linux下獲取儲存介質扇區大小

2021-06-16 20:34:25 字數 1212 閱讀 2547

通過proc檔案系統獲得,在proc檔案系統中有乙個名為partitions的檔案。這個檔案中包含本地磁碟的硬碟及分割槽信 息。根據linux下裝置命名規則,如果裝置名的最後乙個字元是數字就應該是分割槽,否則就是硬碟。 根據這個檔案,還可以知道硬碟裝置名稱以及每個硬碟中分割槽的數量和每個分割槽的裝置名稱。

獲取硬碟扇區大小資訊:

/* get size in bytes */

intblkdev_get_size(int fd, unsigned long long *bytes)

if (ioctl(fd, blkgetsize, &size) >= 0)

return -1;}

根據ata8-acs文件規範,我們的作業系統都會有乙個ata identify device的資料結構來說明乙個磁碟裝置的,無論linux還是windows都會有乙個,在這裡我以linux為例說明,windows也一樣可用api獲取。

在linux下:

unsigned short word106 = 0;

struct hd_driveid id;

int fd = open(diskname, o_rdonly);

ioctl(fd, hdio_get_identity, &id);

word106 = id.words104_125[2];

獲取這個結構的第106個字(注意是字,不是位元組)。而這個字就定義了磁碟扇區的大小,我們來看下這個字是怎麼定義扇區大小的。

bit 15 固定為0。

bit 14 固定為1。

bit 13 如果為1就說明乙個邏輯扇區有多個物理扇區組成。

bit 12 如果為1就說明裝置被格式化成乙個邏輯扇區的大小超過256個字。

bit 11-4 為保留。

bit 3-0 如果bit 13為1的話,這三個位元位就用來表示邏輯扇區的大小。

我們重點看下這前4個位元位是怎麼表示扇區大小的。我用個公式來表示,sector_size = 2^x * 物理扇區大小(即512b)。

即是說邏輯扇區大小是2的x次方個物理扇區的大小,即是:扇區大小 = 2^x * 512。x就是這個字的前4位的值。

舉個例來說,如果是個大扇區,扇區大小為4k即是4096個位元組,那麼在這個字中的表示為:

bit 13 = 1

bit 3-0 = 0011

二進位制數0011 = 十進位制數3,那麼2的三次方為8,那麼扇區大小是8*512,即4096 bytes。

獲取儲存過程內容 SQL server

查詢儲存過程 內容 select name 儲存過程名稱,definition 儲存過程內容 from sys.sql modules as m inner join sys.all objects as o on m.object id o.object id where o.type p and...

獲取儲存過程的ReturnValue值

input 此引數只用於將資訊從應用程式傳輸到儲存過程。inputoutput 此引數可將資訊從應用程式傳輸到儲存過程,並將資訊從儲存過程傳輸回應用程式。output 此引數只用於將資訊從儲存過程傳輸回應用程式。returnvalue 此引數表示儲存過程的返回值。sql server 的儲存過程引數...

Python如何執行儲存過程,獲取儲存過程返回值

在pathon中如何執行儲存過程呢?可以使用如下方法 儲存過程定義基本如下 alter procedure dbo mysp station varchar 50 sn varchar 50 info varchar 500 output msg varchar 500 output 1.使用ado...