One of the coolest (and most dangerous) commands in vSAN is objtool. Since this datastore is not vmfs but vsanfs (and object based), the objtool command is the utility that performs different tasks such as creating, resizing and deleting objects.
What follows is a series of examples on how to use such command:
# find / -name objtool
/usr/lib/vmware/osfs/bin/objtool
Want to learn how to use the command?
Want to delete an object? Better have a backup...
Note: Add the -t 0 option to the previous command to create a vdisk object. This can also be verified with the rvc.
What follows is a series of examples on how to use such command:
# find / -name objtool
/usr/lib/vmware/osfs/bin/objtool
# cd /usr/lib/vmware/osfs/bin
Want to learn how to use the command?
# ./objtool --help
usage: ./objtool <cmd> <options>
Commands:
create Create an object.
-s/--size n size in bytes (or KB, MB, GB or TB)
-n/--name <string> Optional user-friendly name.
-m/--haMetaData <string> Optional HA metadata.
-p/--policy <string> Optional VSAN policy.
-g/--groupUuid <string> Optional groupUuid of the object.
-a/--allocType <value> Allocation Type.
0 - Thick (default)
1 - Eager Zeroed Thick
2 - Zeroed Thick
3 - Thin
--capabilities <value> Capability flags.
0 - None (default)
1 - Strict GWE (VsanSparse)
-t/--objClass <value> Object Class.
0 - vdisk (default)
1 - snapshot
2 - vmnamespace
3 - vmswap
4 - vmem
5 - sidecar
6 - hbrpersist
7 - coredump
delete Delete an object.
-u/--uuid UUID of the object
-f/--forceDelete Optional force delete mode
open Create a node for an object in DevFS.
-u/--uuid UUID of the object
setAttr Set attributes of an object
-u/--uuid UUID of the object
-n/--name <string> Optional user-friendly name.
-m/--haMetaData <string> Optional HA metadata.
-d/--descPath <string> Optional descriptor path.
--capabilities <value> Capability flags.
0 - None (default)
1 - Strict GWE (VsanSparse)
getAttr Get attributes of an object
-u/--uuid UUID of the object
-c/--isComponent Specified uuid is a component uuid
-x/--diskUuid Disk uuid of the component
--bypassDom Bypass DOM and read from LSOM
--format Pretty print the output
(Currently, only JSON)
resize Resize an object
-u/--uuid UUID of the object
-s/--size n size in bytes (or KB, MB, GB or TB)
-l/--lockFilePath <path> Lock file path for the object
truncate Truncate an object
-u/--uuid UUID of the object
-s/--size n size in bytes (or KB, MB, GB or TB)
setPolicy Set policy of an object
-u/--uuid UUID of the object.
-p/--policy <string> VSAN policy.
setMirror Set the read mirror for an object
-u/--uuid UUID of the object
-r/--readMirror n mirror to use (-1 to unset)
reset Reset object.
-u/--uuid UUID of the object
Global Options
-v/--verbose Verbosity level.
-q/--quiet No need to print success messages
-h/--help Print this message.
# cat /vmfs/volumes/vsanDatastore/testvm/testvm.vmdk
# Disk DescriptorFile
version=4
encoding="UTF-8"
CID=d68d61b2
parentCID=ffffffff
isNativeSnapshot="no"
createType="vmfs"
# Extent description
RW 2097152 VMFS "vsan://2cc4ca59-f4d8-43c3-9a0b-005056013df7" <-- notice this object id
# The Disk Data Base
#DDB
ddb.adapterType = "lsilogic"
ddb.deletable = "true"
ddb.geometry.cylinders = "512"
ddb.geometry.heads = "128"
ddb.geometry.sectors = "32"
ddb.longContentID = "14bf5c5d81a00d863d0b300fd68d61b2"
ddb.thinProvisioned = "1"
ddb.uuid = "60 00 C2 9b 2d 72 3f 5c-1c 8a 12 5f ca f9 2d 38"
ddb.virtualHWVersion = "13"
Want to delete an object? Better have a backup...
# ./objtool delete -u 2cc4ca59-f4d8-43c3-9a0b-005056013df7 -f
Will this delete the object? You bet... Better have a good backup.
Notice that after the components for the virtual disk object are no longer present.
What about renaming an object? Objtool to the rescue...
# ls -lh
total 5120
drwxr-xr-t 1 root root 2.1K Sep 26 21:18 26c4ca59-1028-c0c6-e31d-005056013df7
drwxr-xr-t 1 root root 1.9K Sep 12 15:38 3fc7ad59-ef19-ba92-6088-005056013e28
drwxr-xr-t 1 root root 1.4K Sep 26 17:56 6986ca59-70d0-0591-c8ff-005056013df7
drwxr-xr-t 1 root root 3.0K Sep 26 21:18 bfc6ad59-b712-25d2-8939-005056013e24
drwxr-xr-t 1 root root 1.9K Sep 15 17:40 cac7ad59-f2ac-2d3c-e054-005056013e28
lrwxr-xr-x 1 root root 36 Sep 26 21:27 javier01 -> 6986ca59-70d0-0591-c8ff-005056013df7
lrwxr-xr-x 1 root root 36 Sep 26 21:27 testvm -> 26c4ca59-1028-c0c6-e31d-005056013df7 <--notice this line and the name
lrwxr-xr-x 1 root root 36 Sep 26 21:27 ub1404lts1 -> bfc6ad59-b712-25d2-8939-005056013e24
lrwxr-xr-x 1 root root 36 Sep 26 21:27 ub1404lts2 -> 3fc7ad59-ef19-ba92-6088-005056013e28
lrwxr-xr-x 1 root root 36 Sep 26 21:27 ub1404lts5 -> cac7ad59-f2ac-2d3c-e054-005056013e28
# /usr/lib/vmware/osfs/bin/objtool setAttr -u 26c4ca59-1028-c0c6-e31d-005056013df7 -n newtestvm
Object set attribute succeeded
# /etc/init.d/osfsd restart
watchdog-osfsd: Terminating watchdog process with PID 312029
Waiting for process to terminate...
osfsd stopped
osfsd started
# ls -lh
total 5120
drwxr-xr-t 1 root root 2.1K Sep 26 21:18 26c4ca59-1028-c0c6-e31d-005056013df7
drwxr-xr-t 1 root root 1.9K Sep 12 15:38 3fc7ad59-ef19-ba92-6088-005056013e28
drwxr-xr-t 1 root root 1.4K Sep 26 17:56 6986ca59-70d0-0591-c8ff-005056013df7
drwxr-xr-t 1 root root 3.0K Sep 26 21:18 bfc6ad59-b712-25d2-8939-005056013e24
drwxr-xr-t 1 root root 1.9K Sep 15 17:40 cac7ad59-f2ac-2d3c-e054-005056013e28
lrwxr-xr-x 1 root root 36 Sep 26 21:30 javier01 -> 6986ca59-70d0-0591-c8ff-005056013df7
lrwxr-xr-x 1 root root 36 Sep 26 21:30 newtestvm -> 26c4ca59-1028-c0c6-e31d-005056013df7 <-- notice the new name
lrwxr-xr-x 1 root root 36 Sep 26 21:30 ub1404lts1 -> bfc6ad59-b712-25d2-8939-005056013e24
lrwxr-xr-x 1 root root 36 Sep 26 21:30 ub1404lts2 -> 3fc7ad59-ef19-ba92-6088-005056013e28
lrwxr-xr-x 1 root root 36 Sep 26 21:30 ub1404lts5 -> cac7ad59-f2ac-2d3c-e054-005056013e28
Want information about an object?
# /usr/lib/vmware/osfs/bin/objtool getAttr -u 26c4ca59-1028-c0c6-e31d-005056013df7
Object Attributes --
UUID:26c4ca59-1028-c0c6-e31d-005056013df7
Object type:vsan
Object size:273804165120
User friendly name:newtestvm
HA metadata:(null)
Allocation type:Thick
Policy:((\"stripeWidth\" i1) (\"cacheReservation\" i0) (\"proportionalCapacity\" i0) (\"hostFailuresToTolerate\" i1) (\"forceProvisioning\" i0) (\"spbmProfileId\" \"aa6d5a82-1c88-45da-85d3-3d74b91a5bad\") (\"spbmProfileGenerationNumber\" l+0) (\"spbmProfileName\" \"vSAN Default Storage Policy\"))
Object class: vmnamespace
Object capabilities: NONE
Object path: /vmfs/volumes/vsan:521305e4430dd845-d59b1943736fdc88/
And how do I create an object?
# /usr/lib/vmware/osfs/bin/objtool create -s 1KB -a 1 -t 0-n javierobject
Creating object of size 1024 bytes
Setting object class to 0
UUID:3184dd59-c0ea-6ab8-b241-005056013df7how do I create my own object?
Note: The previous command creates an object using the default policy. This could be verified also with the rvc.
And how do I create an object?
# /usr/lib/vmware/osfs/bin/objtool create -s 1KB -a 1 -t 0-n javierobject
Creating object of size 1024 bytes
Setting object class to 0
UUID:3184dd59-c0ea-6ab8-b241-005056013df7how do I create my own object?
Note: The previous command creates an object using the default policy. This could be verified also with the rvc.
Note: Add the -t 0 option to the previous command to create a vdisk object. This can also be verified with the rvc.