通訊協定
封鎖
定義於 fuchsia.storage.block/block.fidl
定義裝置的存取權,該裝置可透過區塊精細程度區塊進行讀取和寫入。
ConnectMapper
連線至裝置的 Mapper 通訊協定,允許唯讀對應頁面。由於呼叫端已持有 Block 的控制代碼 (可授予裝置的完整讀取/寫入權限),因此這個方法可直接取得對應的 Mapper 通訊協定,不需要頻外管道或獨立的能力轉送。
如果裝置或驅動程式庫不支援 Mapper 通訊協定,系統會傳回 ZX_ERR_NOT_SUPPORTED。
要求
| 名稱 | 類型 |
|---|---|
server_end |
server_end:Mapper
|
回應
| 名稱 | 類型 |
|---|---|
payload |
Block_ConnectMapper_Result
|
刪除
刪除目前的磁碟區,將其從 VolumeManager 中移除,並釋出所有基礎儲存空間。與磁碟區的連線也會關閉。
如果裝置不是磁碟區,則傳回 ZX_ERR_NOT_SUPPORTED。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
延長
擴充這個分區的對應。
能否擴充分區,取決於基礎裝置是否有足夠的可用空間、是否有足夠的可用運算單元來追蹤磁碟區管理員標頭中的位元組,以及分區限制 (請參閱 VolumeManager.SetPartitionLimit)。
如果裝置不是磁碟區,則傳回 ZX_ERR_NOT_SUPPORTED。
要求
| 名稱 | 類型 |
|---|---|
start_slice |
uint64
|
slice_count |
uint64
|
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
GetInfo
取得基礎區塊裝置的相關資訊。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
payload |
Block_GetInfo_Result
|
GetInstanceGuid
取得分區的執行個體 GUID (如有)。如果分區沒有執行個體 GUID,則會傳回 ZX_ERR_NOT_SUPPORTED。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
guid |
Guid?
|
GetMetadata
取得分區的中繼資料。
如果分區沒有指定的中繼資料,可能就不會顯示欄位。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
payload |
Block_GetMetadata_Result
|
GetName
取得分區名稱 (如有)。如果分區沒有名稱,系統會傳回 ZX_ERR_NOT_SUPPORTED。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
name |
string:128?
|
GetTypeGuid
取得分區的類型 GUID (如果有的話)。如果分區沒有類型 GUID,則會傳回 ZX_ERR_NOT_SUPPORTED。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
guid |
Guid?
|
GetVolumeInfo
傳回這個磁碟區和內嵌磁碟區管理員的相關資訊。
如果裝置不是磁碟區,則傳回 ZX_ERR_NOT_SUPPORTED。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
manager |
VolumeManagerInfo?
|
volume |
VolumeInfo?
|
OpenSession
在區塊裝置上開啟新的 FIFO 工作階段。
要求
| 名稱 | 類型 |
|---|---|
session |
server_end:Session
|
OpenSessionWithOptions
在區塊裝置上開啟新的 FIFO 工作階段,並提供其他選項。
對應
mappings 引數是邏輯 -> 實體區塊對應清單,伺服器會將其透明地套用至此工作階段中區塊 FIFO 要求中的裝置偏移。對應關係在邏輯上是連續的,從邏輯偏移 0 開始。
這個介面僅供巢狀區塊實作項目內部使用,以便提供直通式 I/O。舉例來說,固定分區對應 (例如 GPT) 會為每個分區提供區塊通訊協定,並在基礎區塊裝置上呼叫 OpenSessionWithOptions,藉此回應 OpenSession 要求,提供對應,將相對於 (且受限於) 分區的區塊偏移量轉譯為裝置上的絕對偏移量。
對應只能限制裝置的可見範圍,伺服器會拒絕超出裝置範圍的對應。
如果 mappings 為空白,工作階段管道會關閉,並顯示墓誌銘 ZX_ERR_INVALID_ARGS。
要求
| 名稱 | 類型 |
|---|---|
session |
server_end:Session
|
mappings |
vector<BlockOffsetMapping>:4
|
QuerySlices
傳回從每個 vslice 開始,連續分配 (或未分配) 的 vslice 數量。
如果裝置不是磁碟區,則傳回 ZX_ERR_NOT_SUPPORTED。
要求
| 名稱 | 類型 |
|---|---|
start_slices |
vector<uint64>:16
|
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
response |
array<VsliceRange, 16>
|
response_count |
uint64
|
縮小
縮減虛擬分區。如果釋出任何配量,即使部分要求範圍包含未分配的配量,也會傳回 ZX_OK。
如果裝置不是磁碟區,則傳回 ZX_ERR_NOT_SUPPORTED。
要求
| 名稱 | 類型 |
|---|---|
start_slice |
uint64
|
slice_count |
uint64
|
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
Mapper
定義於 fuchsia.storage.block/block.fidl
由區塊驅動程式庫公開,透過 fshost 轉送至 pkg-cache。
OpenSession
使用對應 VMO 和驗證工具控制代碼,啟動驅動程式庫對應工具。
要求
| 名稱 | 類型 |
|---|---|
session |
server_end:MapperSession
|
mapping_vmo |
handle<vmo>
|
port |
handle<port>?
|
delivery_queue |
handle<vmo>?
|
回應
| 名稱 | 類型 |
|---|---|
payload |
Mapper_OpenSession_Result
|
MapperSession
定義於 fuchsia.storage.block/block.fidl
代表有效的驅動程式庫對應工作階段。
關閉
終止連線。
呼叫 Close 後,用戶端不得傳送任何其他要求。
伺服器傳送狀態回應後,無論狀態為何,都應關閉連線,且不傳送 epitaph。
關閉管道的用戶端,在語意上應等同於呼叫 Close,而不知道關閉作業何時完成或其狀態。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
payload |
fuchsia.unknown/Closeable_Close_Result
|
CloseVmo
關閉與 key 相關聯、由分頁器支援的 VMO。
要求
| 名稱 | 類型 |
|---|---|
key |
uint64
|
CreateVmo
建立與 key 相關聯、由翻頁元素支援的 size 位元組 VMO。這個 VMO 的分頁錯誤會直接由驅動程式庫對應器處理。
要求
| 名稱 | 類型 |
|---|---|
key |
uint64
|
size |
uint64
|
options |
CreateVmoOptions
|
回應
| 名稱 | 類型 |
|---|---|
payload |
MapperSession_CreateVmo_Result
|
OpenChildSession
開啟子對應器工作階段,其讀取作業會透過父項工作階段中的 parent_key 進行對應。關閉父項工作階段時,從該工作階段開啟的所有子項工作階段也會一併關閉。
要求
| 名稱 | 類型 |
|---|---|
session |
server_end:MapperSession
|
mapping_vmo |
handle<vmo>
|
parent_key |
uint64
|
port |
handle<port>?
|
delivery_queue |
handle<vmo>?
|
回應
| 名稱 | 類型 |
|---|---|
payload |
MapperSession_OpenChildSession_Result
|
RecordProfile
開始記錄這個對應器工作階段的存取設定檔。
要求
| 名稱 | 類型 |
|---|---|
recording |
server_end:Recording
|
回應
| 名稱 | 類型 |
|---|---|
payload |
MapperSession_RecordProfile_Result
|
錄音中
定義於 fuchsia.storage.block/block.fidl
代表 MapperSession 上的有效設定檔記錄。
停止
停止記錄設定檔,並在 vmo 中傳回記錄的設定檔資料 (編碼工作階段 key 和每個讀取的預讀對齊邏輯位元組偏移)。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
payload |
Recording_Stop_Result
|
工作階段
定義於 fuchsia.storage.block/block.fidl
代表與區塊裝置的工作階段。
這個通訊協定會雙向編碼基礎物件的生命週期;只有在通訊協定的兩端都開啟時,基礎物件才會保持運作。也就是:
- 關閉用戶端會導致物件遭到刪除。
- 如果伺服器端關閉,表示物件已不存在。
您可以使用 fuchsia.unknown/Closeable.Close 同步刪除物件。
AttachVmo
將 VMO 附加至工作階段。不支援可調整大小的 VMO,並會傳回 ZX_ERR_INVALID_ARGS。
傳回可用於參照 VMO 的 ID。
要求
| 名稱 | 類型 |
|---|---|
vmo |
handle<vmo>
|
回應
| 名稱 | 類型 |
|---|---|
payload |
Session_AttachVmo_Result
|
關閉
終止連線。
呼叫 Close 後,用戶端不得傳送任何其他要求。
伺服器傳送狀態回應後,無論狀態為何,都應關閉連線,且不傳送 epitaph。
關閉管道的用戶端,在語意上應等同於呼叫 Close,而不知道關閉作業何時完成或其狀態。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
payload |
fuchsia.unknown/Closeable_Close_Result
|
GetFifo
傳回 FIFO 用戶端端的控制代碼。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
payload |
Session_GetFifo_Result
|
RegisterKey
使用這個工作階段註冊內嵌加密金鑰控制代碼 (fuchsia.hardware.inlineencryption/Device.ProgramKey 傳回的 key_token)。
傳回以工作階段為範圍的 slot 權杖,可在設定 BlockIoFlag.INLINE_ENCRYPTION_ENABLED 時傳入 BlockFifoRequest.slot。
- 如果
key_token不是這個區塊裝置的有效內嵌加密金鑰權杖,或金鑰已遭撤銷,則會傳回錯誤ZX_ERR_ACCESS_DENIED。 - 如果裝置不支援內嵌加密,則會傳回錯誤
ZX_ERR_NOT_SUPPORTED。
要求
| 名稱 | 類型 |
|---|---|
key_token |
handle<eventpair>
|
回應
| 名稱 | 類型 |
|---|---|
payload |
Session_RegisterKey_Result
|
VolumeManager
定義於 fuchsia.storage.block/block.fidl
VolumeManager 可控制 Volume 集合。
啟用
自動將 vpartition (依執行個體 GUID) 標示為無效,同時尋找另一個分區 (依執行個體 GUID) 並標示為有效。
如果「舊」分區不存在,系統會忽略 GUID。如果「舊」分區與「新」分區相同,系統會忽略「舊」GUID。如果「new」分區不存在,則會傳回 ZX_ERR_NOT_FOUND。
這個函式不會刪除「舊」分區,只會將其標示為不活動。如要回收該空間,必須明確刪除「舊」分區。重新繫結 FVM 驅動程式庫時 (即重新啟動時),系統也會自動執行這項刪除作業。
這項函式可用於 FVM 內的 A/B 更新,因為它能啟用更新後的分區。
要求
| 名稱 | 類型 |
|---|---|
old_guid |
Guid
|
new_guid |
Guid
|
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
AllocatePartition
分配具有要求功能的虛擬分區。
slice_count 是最初分配給分區的切片數量,偏移量為零。分配給新分區的切片數量至少須為一個。type 和 value 分別代表分區的類型和執行個體 GUID。name 是新分區的名稱。
要求
| 名稱 | 類型 |
|---|---|
slice_count |
uint64
|
type |
Guid
|
instance |
Guid
|
name |
string:128
|
flags |
uint32
|
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
GetInfo
取得描述這個 VolumeManager 例項的 VolumeManagerInfo。
NOTE:GetInfo() 用於同步處理子分區裝置與 devfs 的可見度。實作項目必須在 VolumeManager 的所有子分區都新增至 devfs 後,才能回應,確保用戶端可以安全地列舉這些分區。
詳情請參閱 https://fxbug.dev/42077585。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
info |
VolumeManagerInfo?
|
GetPartitionLimit
擷取分區的分配限制。如果傳回值為 0,表示沒有限制,只要裝置上有可用空間,就可以擴充分區。
如果分區已達到目前大小,之後才套用較小的限制,則分區可能會大於這項限制。
目前,分區限制不會在重新啟動後保留,但日後可能會有變動。
要求
| 名稱 | 類型 |
|---|---|
guid |
Guid
|
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
slice_count |
uint64
|
SetPartitionLimit
設定分區的分配限制。分區無法擴充超過分配限制。分區限制絕不會縮減分區,因此如果這個值小於目前的分區大小,系統會保留目前的大小,但不會進一步增加。
分配限制是針對 VolumeManager API,而非分區,因為這代表更高的能力層級。這些限制旨在保護區塊裝置 (以及 Volume API) 的使用者。
目前,分區限制不會在重新啟動後保留,但日後可能會有變動。
要求
| 名稱 | 類型 |
|---|---|
guid |
Guid
|
slice_count |
uint64
|
回應
| 名稱 | 類型 |
|---|---|
status |
zx/Result
|
SetPartitionName
重新命名指定的分區。如果現有裝置的拓撲路徑包含分區名稱,則可能不會反映名稱變更,直到下次例項化裝置為止。
要求
| 名稱 | 類型 |
|---|---|
guid |
Guid
|
name |
string:128
|
回應
| 名稱 | 類型 |
|---|---|
payload |
VolumeManager_SetPartitionName_Result
|
STRUCTS
BlockInfo
定義於 fuchsia.storage.block/block.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
block_count |
uint64
|
這個區塊裝置中的區塊數量。 |
無預設值 |
block_size |
uint32
|
單一區塊的大小。 |
無預設值 |
max_transfer_size |
uint32
|
轉移作業的大小上限 (以位元組為單位)。如果沒有這類上限,請設為 MAX_TRANSFER_UNBOUNDED。 |
無預設值 |
flags |
DeviceFlag
|
裝置 ID。 |
無預設值 |
BlockOffsetMapping
定義於 fuchsia.storage.block/block.fidl
說明區塊範圍的重新對應。邏輯偏移量是由傳遞至 OpenSessionWithOptions 的清單中的位置隱含,這是邏輯上連續的對應清單。請注意,所有欄位都以區塊為單位,而非位元組。
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
target_block_offset |
uint64
|
無預設值 | |
length |
uint64
|
無預設值 |
Block_ConnectMapper_Response
定義於 fuchsia.storage.block/block.fidl
<EMPTY>
Block_GetInfo_Response
定義於 fuchsia.storage.block/block.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
info |
BlockInfo
|
無預設值 |
Guid
定義於 fuchsia.storage.block/block.fidl
全域專屬 ID,可用於識別分區。
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
value |
array<uint8, 16>
|
無預設值 |
MapperSession_CreateVmo_Response resource
定義於 fuchsia.storage.block/block.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
vmo |
handle<vmo>
|
無預設值 |
MapperSession_OpenChildSession_Response
定義於 fuchsia.storage.block/block.fidl
<EMPTY>
MapperSession_RecordProfile_Response
定義於 fuchsia.storage.block/block.fidl
<EMPTY>
Mapper_OpenSession_Response
定義於 fuchsia.storage.block/block.fidl
<EMPTY>
Recording_Stop_Response 資源
定義於 fuchsia.storage.block/block.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
vmo |
handle<vmo>
|
無預設值 |
Session_AttachVmo_Response
定義於 fuchsia.storage.block/block.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
vmoid |
VmoId
|
無預設值 |
Session_GetFifo_Response 資源
定義於 fuchsia.storage.block/block.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
fifo |
handle<fifo>
|
無預設值 |
Session_RegisterKey_Response
定義於 fuchsia.storage.block/block.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
slot |
uint8
|
無預設值 |
VmoId
定義於 fuchsia.storage.block/block.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
id |
uint16
|
無預設值 |
VolumeInfo
定義於 fuchsia.storage.block/block.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
partition_slice_count |
uint64
|
分配給磁碟區的分區數量。 |
無預設值 |
slice_limit |
uint64
|
指派給這個分區的切片數量上限 (如有)。如果未限制分區大小,這個值會是 0。只要分區的切片數量小於或等於這個值,分區就能擴充為磁碟區管理員中的可用切片。 如果分區已達到目前大小,之後才套用較小的限制,則分區可能會大於這項限制。 查看 |
無預設值 |
VolumeManagerInfo
定義於 fuchsia.storage.block/block.fidl
VolumeManagerInfo 描述的是磁碟區管理員的屬性,而非個別磁碟區。
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
slice_size |
uint64
|
單一配量的大小,以位元組為單位。 |
無預設值 |
slice_count |
uint64
|
磁碟區管理員目前可使用的磁碟區數量。這項指標會計算 allocated_slice_count 加上可用配量數。 |
無預設值 |
assigned_slice_count |
uint64
|
目前指派給分區的切片數量。 |
無預設值 |
maximum_slice_count |
uint64
|
如果包含磁碟區管理員本身的磁碟分割擴充 (即磁碟區管理員在 GPT 磁碟分割上初始化,且該磁碟分割已超出原本分配的容量),磁碟區管理員可擴充使用的容量上限。這個值是磁碟區管理工具標頭中保留的項目數量,與實體裝置的大小無關 (可能較大或較小)。 |
無預設值 |
max_virtual_slice |
uint64
|
虛擬切片編號可使用的最大值。 |
無預設值 |
VolumeManager_SetPartitionName_Response
定義於 fuchsia.storage.block/block.fidl
<EMPTY>
VsliceRange
定義於 fuchsia.storage.block/block.fidl
VsliceRange 描述虛擬切片的範圍:開始、長度和分配狀態。
這些範圍會以排序容器的形式傳回,隱含描述起始偏移量,從「索引零」切片開始。
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
allocated |
bool
|
如果已分配虛擬切片,則為 True,否則為 False。 |
無預設值 |
count |
uint64
|
連續虛擬切片的數量。 |
無預設值 |
列舉
BlockOpcode strict
類型:uint8
定義於 fuchsia.storage.block/block.fidl
FIFO 要求中使用的 opcode。
| 名稱 | 值 | 說明 |
|---|---|---|
閱讀 |
1 |
定期從裝置讀取或寫入資料。作業可能會在內部快取。 |
WRITE |
2 |
|
FLUSH |
3 |
將所有控制器或裝置快取資料寫入非揮發性儲存空間。 |
TRIM |
4 |
指示裝置將多個區塊設為無效,以便用於儲存其他內容。這基本上是「刪除」最佳化,裝置會負責捨棄舊內容,用戶端不必寫入特定模式。作業可能會在內部快取。 |
CLOSE_VMO |
5 |
從區塊裝置卸載 VMO。 |
TABLES
PartitionInfo
定義於 fuchsia.storage.block/block.fidl
描述分區的中繼資料。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
name |
string:128
|
|
2 |
type_guid |
Guid
|
|
3 |
instance_guid |
Guid
|
|
4 |
start_block_offset |
uint64
|
如果分區是由多個實體分區組成,則不會有 start_block_offset。請參閱 fuchsia.storage.partitions.OverlayPartition。 |
5 |
num_blocks |
uint64
|
如果分區是磁碟區,則不會有 num_blocks,因為磁碟區的大小會動態調整,並可透過 fuchsia.storage.block.Block/Extend 擴充。如要取得目前大小,請使用 fuchsia.storage.block.Block/GetVolumeInfo。 |
6 |
flags |
uint64
|
分區資料表項目旗標 (例如 GPT 分區中的 GPT 分區資料表項目旗標)。請注意,這與 BlockInfo 傳回的裝置旗標不同。複合分區不會顯示這個欄位。 |
UNIONS
Block_ConnectMapper_Result strict
定義於 fuchsia.storage.block/block.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
Block_ConnectMapper_Response
|
|
2 |
err |
zx/Status
|
Block_GetInfo_Result strict
定義於 fuchsia.storage.block/block.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
Block_GetInfo_Response
|
|
2 |
err |
zx/Status
|
Block_GetMetadata_Result strict
定義於 fuchsia.storage.block/block.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
PartitionInfo
|
|
2 |
err |
zx/Status
|
MapperSession_CreateVmo_Result strict resource
定義於 fuchsia.storage.block/block.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
MapperSession_CreateVmo_Response
|
|
2 |
err |
zx/Status
|
|
3 |
framework_err |
internal
|
MapperSession_OpenChildSession_Result strict
定義於 fuchsia.storage.block/block.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
MapperSession_OpenChildSession_Response
|
|
2 |
err |
zx/Status
|
|
3 |
framework_err |
internal
|
MapperSession_RecordProfile_Result strict
定義於 fuchsia.storage.block/block.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
MapperSession_RecordProfile_Response
|
|
2 |
err |
zx/Status
|
|
3 |
framework_err |
internal
|
Mapper_OpenSession_Result strict
定義於 fuchsia.storage.block/block.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
Mapper_OpenSession_Response
|
|
2 |
err |
zx/Status
|
|
3 |
framework_err |
internal
|
Recording_Stop_Result strict resource
定義於 fuchsia.storage.block/block.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
Recording_Stop_Response
|
|
2 |
err |
zx/Status
|
|
3 |
framework_err |
internal
|
Session_AttachVmo_Result strict
定義於 fuchsia.storage.block/block.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
Session_AttachVmo_Response
|
|
2 |
err |
zx/Status
|
Session_GetFifo_Result strict resource
定義於 fuchsia.storage.block/block.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
Session_GetFifo_Response
|
|
2 |
err |
zx/Status
|
Session_RegisterKey_Result strict
定義於 fuchsia.storage.block/block.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
Session_RegisterKey_Response
|
|
2 |
err |
zx/Status
|
VolumeManager_SetPartitionName_Result strict
定義於 fuchsia.storage.block/block.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
VolumeManager_SetPartitionName_Response
|
|
2 |
err |
zx/Status
|
BITS
BlockIoFlag strict
類型:uint32
定義於 fuchsia.storage.block/block.fidl
可能附加至 FIFO 要求的標記。
| 名稱 | 值 | 說明 |
|---|---|---|
GROUP_ITEM |
1 | 將下列要求與 |
GROUP_LAST |
2 | 只有在這項要求 (以及群組內所有先前的要求) 完成後,才回應。僅適用於 |
FORCE_ACCESS |
4 | 將這項作業標示為「強制單元存取」(FUA),表示在資料寫入非揮發性媒體 (寫入) 之前,不應完成這項作業,且讀取作業應略過任何裝置端快取。 |
PRE_BARRIER |
8 | 將預先屏障附加至要求。這可確保在這項要求之前執行的要求,不會重新排序到這項要求之後執行。 注意:屏障「不」保證傳輸中要求的順序。用戶端尚未收到回應的要求,都會視為處理中,且不保證與這項要求的相對順序。這對分組要求有重要影響:如果群組中間的要求設定了 PRE_BARRIER,則無法保證該要求與同一群組中其他要求的順序。 |
DECOMPRESS_WITH_ZSTD |
16 | 如果設定,系統會解壓縮要求。 |
INLINE_ENCRYPTION_ENABLED |
32 | 使用 |
CreateVmoOptions strict
類型:uint32
定義於 fuchsia.storage.block/block.fidl
「MapperSession.CreateVmo」的選項。
| 名稱 | 值 | 說明 |
|---|---|---|
SUPPLY_ZEROES_ON_ERROR |
1 | 如果設定,頁面錯誤期間的 I/O 錯誤會提供零填補頁面,並在 VMO 上宣告 |
DeviceFlag strict
類型:uint32
定義於 fuchsia.storage.block/block.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
READONLY |
1 | 所有寫入區塊裝置的作業都會失敗。 |
可拆式 |
2 | 區塊裝置可能會在作業期間從裝置中移除。 |
TRIM_SUPPORT |
8 | 裝置支援 Trim。 |
FUA_SUPPORT |
16 | 裝置支援強制單元存取 (FUA)。 如果未設定這個位元,且傳送的要求已設定 FORCE_ACCESS 選項,裝置會在要求完成後 (但在回應用戶端之前) 執行裝置清除作業,模擬 FUA。強烈建議用戶端探測 FUA 支援,並避免在沒有裝置支援的情況下使用 FORCE_ACCESS,因為這項操作的成本很高。 |
ZSTD_DECOMPRESSION_SUPPORT |
32 | 裝置支援 zstd 解壓縮。 |
BARRIER_SUPPORT |
64 | 裝置提供 Barrier 支援。 如果未設定這個位元,且傳送的要求已設定 PRE_BARRIER 選項,裝置會在提交要求前執行裝置清除作業,模擬屏障。強烈建議用戶端探測屏障支援,並避免在沒有裝置支援的情況下使用 PRE_BARRIER,因為這項操作的成本很高。 |
常數
| 名稱 | 值 | 類型 | 說明 |
|---|---|---|---|
| ALLOCATE_PARTITION_FLAG_INACTIVE |
1
|
uint32 |
表示分區應建立為無效,這代表分區會在重新啟動時刪除 (除非呼叫「Activate」啟用)。 |
| GUID_LENGTH |
16
|
uint32 |
|
| MAX_DECOMPRESSED_BYTES |
134217728
|
uint64 |
單一解壓縮作業群組中可解壓縮的資料量上限。 |
| MAX_MAPPINGS |
4
|
uint32 |
開啟工作階段時,可提供的區塊偏移對應數量上限。這項限制是任意設定,可視需要提高。 |
| MAX_SLICE_REQUESTS |
16
|
uint32 |
查詢磁碟區的分配資訊時,可要求的切片數量上限。 |
| MAX_TRANSFER_UNBOUNDED |
4294967295
|
uint32 |
傳輸大小的最大值,表示單一作業實際上沒有最大值。 |
| MAX_TXN_GROUP_COUNT |
8
|
uint32 |
在實際傳回回應之前,系統可能會一次傳送多個區塊 I/O 作業。區塊 I/O 作業可能會同時傳送至不同的 vmoid,也可能在任何時間點傳送至不同的群組。
群組的使用情形由 這些群組可能會以「groupid」表示,範圍為 [0, 與單一群組通訊的通訊協定如下:
對於 注意:
舉例來說,以下是有效的交易序列: -> (groupid = 1, vmoid = 1, OP = Write | GroupItem, reqid = 1) -> (groupid = 1, vmoid = 2, OP = Write | GroupItem, reqid = 2) -> (groupid = 2, vmoid = 3, OP = Write | GroupItem | GroupLast, reqid = 0) <- Response sent to groupid = 2, reqid = 0 -> (groupid = 1, vmoid = 1, OP = Read | GroupItem | GroupLast, reqid = 3) <- Response sent to groupid = 1, reqid = 3 -> (groupid = 3, vmoid = 1, OP = Write | GroupItem, reqid = 4) -> (groupid = don't care, vmoid = 1, OP = Read, reqid = 5) <- Response sent to reqid = 5 -> (groupid = 3, vmoid = 1, OP = Read | GroupItem | GroupLast, reqid = 6) <- Response sent to groupid = 3, reqid = 6 每筆交易都會從裝置讀取或寫入最多 |
| NAME_LENGTH |
128
|
uint32 |
|
| VMOID_INVALID |
0
|
uint16 |
為「無效」VmoId 保留的值。伺服器一律不會分配這個 ID,且這個 ID 可做為未分配 ID 的本機值。 |