Change disaster recovery state of a file system

NAS File Storage REST API Reference

Version
15.6.x
File Size
1291 KB
Audience
anonymous
Part Number
MK-92HNAS100-07
ft:lastEdition
2026-04-07
patch /v9/storage/filesystems/{filesystemId}/change-dr-state

Change disaster recovery state of a file system.

Note: Accepted parameter values may be restricted based on the virtual server access granted by the API key used for authentication.

Authentication: x_subsystem_user Api Key "X-Subsystem-User"
Authentication: x_subsystem_password Api Key "X-Subsystem-Password"
Authentication: api_key Api Key "X-Api-Key"
Authentication: basicAuth HTTP - basic scheme
Path parameters
filesystemId String required

Either the file system ID or the object ID of the file system

Example: 7B263DFD1D71E65A0000000000000000
CLIENT REQUEST
curl -X 'PATCH'
-H "X-Subsystem-User: [[apiKey]]" \
-H "X-Subsystem-Password: [[apiKey]]" \
-H "X-Api-Key: [[apiKey]]" \
-H "Authorization: Basic [[basicHash]]" \
-H 'Accept: application/json'
-H 'Content-Type: application/json'
'https://172.27.146.40:8444/v9/storage/filesystems/{filesystemId}/change-dr-state'
-d ''
import http.client conn = http.client.HTTPSConnection("172.27.146.40:8444") payload = "{\"fixNameClash\":true,\"isDeleteExportsFromDemoted\":true,\"isDeleteSharesFromDemoted\":true,\"isRecoverExportsOnPromoted\":true,\"isRecoverSharesOnPromoted\":true,\"logLevel\":\"NONE\",\"rebindExistingExports\":true,\"skipIdentical\":true,\"snapshotName\":\"Snapshot1\",\"transferSetting\":\"DO_NOT_TRANSFER\",\"transitionOption\":\"READ_WRITE\"}" headers = { 'Authorization': "Basic REPLACE_BASIC_AUTH", 'content-type': "application/json" } conn.request("PATCH", "/v9/storage/filesystems/7B263DFD1D71E65A0000000000000000/change-dr-state", payload, headers) res = conn.getresponse() data = res.read() print(data.decode("utf-8"))
require 'uri' require 'net/http' require 'openssl' url = URI("https://172.27.146.40:8444/v9/storage/filesystems/7B263DFD1D71E65A0000000000000000/change-dr-state") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Patch.new(url) request["Authorization"] = 'Basic REPLACE_BASIC_AUTH' request["content-type"] = 'application/json' request.body = "{\"fixNameClash\":true,\"isDeleteExportsFromDemoted\":true,\"isDeleteSharesFromDemoted\":true,\"isRecoverExportsOnPromoted\":true,\"isRecoverSharesOnPromoted\":true,\"logLevel\":\"NONE\",\"rebindExistingExports\":true,\"skipIdentical\":true,\"snapshotName\":\"Snapshot1\",\"transferSetting\":\"DO_NOT_TRANSFER\",\"transitionOption\":\"READ_WRITE\"}" response = http.request(request) puts response.read_body
const data = JSON.stringify({ "fixNameClash": true, "isDeleteExportsFromDemoted": true, "isDeleteSharesFromDemoted": true, "isRecoverExportsOnPromoted": true, "isRecoverSharesOnPromoted": true, "logLevel": "NONE", "rebindExistingExports": true, "skipIdentical": true, "snapshotName": "Snapshot1", "transferSetting": "DO_NOT_TRANSFER", "transitionOption": "READ_WRITE" }); const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { if (this.readyState === this.DONE) { console.log(this.responseText); } }); xhr.open("PATCH", "https://172.27.146.40:8444/v9/storage/filesystems/7B263DFD1D71E65A0000000000000000/change-dr-state"); xhr.setRequestHeader("Authorization", "Basic REPLACE_BASIC_AUTH"); xhr.setRequestHeader("content-type", "application/json"); xhr.send(data);
HttpResponse<String> response = Unirest.patch("https://172.27.146.40:8444/v9/storage/filesystems/7B263DFD1D71E65A0000000000000000/change-dr-state") .header("Authorization", "Basic REPLACE_BASIC_AUTH") .header("content-type", "application/json") .body("{\"fixNameClash\":true,\"isDeleteExportsFromDemoted\":true,\"isDeleteSharesFromDemoted\":true,\"isRecoverExportsOnPromoted\":true,\"isRecoverSharesOnPromoted\":true,\"logLevel\":\"NONE\",\"rebindExistingExports\":true,\"skipIdentical\":true,\"snapshotName\":\"Snapshot1\",\"transferSetting\":\"DO_NOT_TRANSFER\",\"transitionOption\":\"READ_WRITE\"}") .asString();
import Foundation let headers = [ "Authorization": "Basic REPLACE_BASIC_AUTH", "content-type": "application/json" ] let parameters = [ "fixNameClash": true, "isDeleteExportsFromDemoted": true, "isDeleteSharesFromDemoted": true, "isRecoverExportsOnPromoted": true, "isRecoverSharesOnPromoted": true, "logLevel": "NONE", "rebindExistingExports": true, "skipIdentical": true, "snapshotName": "Snapshot1", "transferSetting": "DO_NOT_TRANSFER", "transitionOption": "READ_WRITE" ] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://172.27.146.40:8444/v9/storage/filesystems/7B263DFD1D71E65A0000000000000000/change-dr-state")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "PATCH" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume()
<?php $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_PORT => "8444", CURLOPT_URL => "https://172.27.146.40:8444/v9/storage/filesystems/7B263DFD1D71E65A0000000000000000/change-dr-state", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "PATCH", CURLOPT_POSTFIELDS => "{\"fixNameClash\":true,\"isDeleteExportsFromDemoted\":true,\"isDeleteSharesFromDemoted\":true,\"isRecoverExportsOnPromoted\":true,\"isRecoverSharesOnPromoted\":true,\"logLevel\":\"NONE\",\"rebindExistingExports\":true,\"skipIdentical\":true,\"snapshotName\":\"Snapshot1\",\"transferSetting\":\"DO_NOT_TRANSFER\",\"transitionOption\":\"READ_WRITE\"}", CURLOPT_HTTPHEADER => [ "Authorization: Basic REPLACE_BASIC_AUTH", "content-type: application/json" ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; }
CURL *hnd = curl_easy_init(); curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "PATCH"); curl_easy_setopt(hnd, CURLOPT_URL, "https://172.27.146.40:8444/v9/storage/filesystems/7B263DFD1D71E65A0000000000000000/change-dr-state"); struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Authorization: Basic REPLACE_BASIC_AUTH"); headers = curl_slist_append(headers, "content-type: application/json"); curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\"fixNameClash\":true,\"isDeleteExportsFromDemoted\":true,\"isDeleteSharesFromDemoted\":true,\"isRecoverExportsOnPromoted\":true,\"isRecoverSharesOnPromoted\":true,\"logLevel\":\"NONE\",\"rebindExistingExports\":true,\"skipIdentical\":true,\"snapshotName\":\"Snapshot1\",\"transferSetting\":\"DO_NOT_TRANSFER\",\"transitionOption\":\"READ_WRITE\"}"); CURLcode ret = curl_easy_perform(hnd);
var client = new RestClient("https://172.27.146.40:8444/v9/storage/filesystems/7B263DFD1D71E65A0000000000000000/change-dr-state"); var request = new RestRequest(Method.PATCH); request.AddHeader("Authorization", "Basic REPLACE_BASIC_AUTH"); request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", "{\"fixNameClash\":true,\"isDeleteExportsFromDemoted\":true,\"isDeleteSharesFromDemoted\":true,\"isRecoverExportsOnPromoted\":true,\"isRecoverSharesOnPromoted\":true,\"logLevel\":\"NONE\",\"rebindExistingExports\":true,\"skipIdentical\":true,\"snapshotName\":\"Snapshot1\",\"transferSetting\":\"DO_NOT_TRANSFER\",\"transitionOption\":\"READ_WRITE\"}", ParameterType.RequestBody); IRestResponse response = client.Execute(request);
Body parameters
required
application/json
fixNameClashboolean

True will generate a new name for the recovered mount point if there's a name clash with an existing mount point within the same virtual server. The existing mount point is not affected. Defaults to true if either shares or exports are to be recovered

isDeleteExportsFromDemotedboolean

True if NFS exports are to be deleted from a promoted file system

isDeleteSharesFromDemotedboolean

True if CIFS/SMB shares are to be deleted from a promoted file system

isRecoverExportsOnPromotedboolean

True if NFS exports are to be recovered on a promoted file system

isRecoverSharesOnPromotedboolean

True if CIFS/SMB shares are to be recovered on a promoted file system

logLevelstring (Enum)

Level of detail that gets logged for the filesystem recovery

Allowed values:"NONE""ERROR""WARNING""INFO"
rebindExistingExportsboolean

True indicates existing exports that have a matching replicated export (same name, file system and path, and have not been recreated since the replication) are rebound to the target file system. This transitions NFS access from the source file system to the target file system. Defaults to true if either shares or exports are to be recovered

skipIdenticalboolean

True indicates that mount points with identical names that target the same file system and path will be skipped. False will allow recovery by generating a new name. Defaults to true if either shares or exports are to be recovered

snapshotNamestring

Name of the snapshot

Example:"Snapshot1"
transferSettingstring (Enum)

Allows the source file systems default disaster recovery transfer setting to be overridden. Default is to use the default file system settings

Allowed values:"DO_NOT_TRANSFER""TRANSFER""USE_FS_DEFAULT"
transitionOptionstring (Enum)

Transition state of the disaster recovery

Allowed values:"READ_WRITE""READ_ONLY""REPLICATION_TARGET""UNMOUNTED"
REQUEST
{ "fixNameClash": false, "isDeleteExportsFromDemoted": false, "isDeleteSharesFromDemoted": false, "isRecoverExportsOnPromoted": false, "isRecoverSharesOnPromoted": false, "logLevel": "NONE", "rebindExistingExports": false, "skipIdentical": false, "snapshotName": "Snapshot1", "transferSetting": "DO_NOT_TRANSFER", "transitionOption": "READ_WRITE" }
Responses

No Content - the resource was updated successfully

Bad Request

Body
application/json
errorCodeintegerint32

Generic error code

Example:1081353
errorMsgstring

Main error message

Example:"Invalid description parameter - the optional parameter must be between 2 and 30 characters long to be valid, if supplied"
RESPONSE
{ "errorCode": 1081353, "errorMsg": "Invalid description parameter - the optional parameter must be between 2 and 30 characters long to be valid, if supplied" }

Unauthorized - the request was rejected because the credentials or API key were either missing or invalid

Forbidden - the client does not have the required permissions to perform the operation

Body
application/json
errorMsgstring

Main error message

Example:"Forbidden request - the client does not have the required permissions to perform the operation"
RESPONSE
{ "errorMsg": "Forbidden request - the client does not have the required permissions to perform the operation" }

Not Found - a resource specified was not found

Body
application/json
errorCodeintegerint32

Generic error code

Example:1081345
errorDetailobject

Detailed error information

detailstring

More details on why the error occurred

faultstring
fileNamestring

Source file where the error occurred

Example:"RestApiFilesystems.cpp"
functionstring

Internal function name where the error occurred

Example:"mountFilesystem"
lineNumberintegerint32

Line number within the source file, where the error occurred

messagestring

Reason why the error(s) occurred

Example:"The file system is currently unassigned"
reasonstring

Reason why the error(s) occurred

Example:"The file system is currently unassigned"
returnedValueintegerint32

Not used

subCodeintegerint32

Specific failure error code

errorMsgstring

Main error message

Example:"Cannot find the object of the operation on the device"
RESPONSE
{ "errorCode": 1081345, "errorDetail": { "detail": "", "fault": "", "fileName": "RestApiFilesystems.cpp", "function": "mountFilesystem", "lineNumber": 0, "message": "The file system is currently unassigned", "reason": "The file system is currently unassigned", "returnedValue": 0, "subCode": 0 }, "errorMsg": "Cannot find the object of the operation on the device" }

Internal Server Error

Body
application/json
errorCodeintegerint32

Generic error code

errorDetailobject

Detailed error information

detailstring

More details on why the error occurred

faultstring
fileNamestring

Source file where the error occurred

Example:"RestApiFilesystems.cpp"
functionstring

Internal function name where the error occurred

Example:"mountFilesystem"
lineNumberintegerint32

Line number within the source file, where the error occurred

messagestring

Reason why the error(s) occurred

Example:"The file system is currently unassigned"
reasonstring

Reason why the error(s) occurred

Example:"The file system is currently unassigned"
returnedValueintegerint32

Not used

subCodeintegerint32

Specific failure error code

errorMsgstring

Main error message

Example:"Failed to mount file system"
RESPONSE
{ "errorCode": 0, "errorDetail": { "detail": "", "fault": "", "fileName": "RestApiFilesystems.cpp", "function": "mountFilesystem", "lineNumber": 0, "message": "The file system is currently unassigned", "reason": "The file system is currently unassigned", "returnedValue": 0, "subCode": 0 }, "errorMsg": "Failed to mount file system" }