rook-ceph 存储常用操作命令备忘

简单常用命令
ceph osd df
ceph osd perf
ceph osd status
ceph osd out osd.10
ceph osd down osd.10
ceph osd purge 10 --yes-i-really-mean-it
ceph osd crush remove osd.10
ceph auth rm osd.10
ceph osd rm osd.10
kubectl delete deploy rook-ceph-osd-10 -n rook-ceph

#检查硬盘路径
fdisk -l
#删除硬盘分区信息
DISK="/dev/sdb"
sgdisk --zap-all $DISK
#清理硬盘数据(hdd硬盘使用dd,ssd硬盘使用blkdiscard,二选一)
dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync
blkdiscard $DISK
#删除原osd的lvm信息(如果单个节点有多个osd,那么就不能用*拼配模糊删除,而根据lsblk -f查询出明确的lv映射信息再具体删除,参照第5项操作)
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %
rm -rf /dev/ceph-*
#重启,sgdisk –zzap-all需要重启后才生效
reboot

ceph health detail 
# 查询pg信息(pg id 为 5.6de)
ceph pg 5.6de query
# 强行重建pg
ceph osd force-create-pg 5.6de --yes-i-really-mean-it
格式化osd硬盘
#检查硬盘路径
fdisk -l
#删除硬盘分区信息
DISK="/dev/sdb"
sgdisk --zap-all $DISK
#清理硬盘数据(hdd硬盘使用dd,ssd硬盘使用blkdiscard,二选一)
dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync
blkdiscard $DISK
#删除原osd的lvm信息(如果单个节点有多个osd,那么就不能用*拼配模糊删除,而根据lsblk -f查询出明确的lv映射信息再具体删除,参照第5项操作)
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %
rm -rf /dev/ceph-*

创建集群
helm inspect values rook-release/rook-ceph >rook-ceph.yaml
helm inspect values rook-release/rook-ceph-cluster >rook-ceph-cluster.yaml
helm install --create-namespace --namespace rook-ceph rook-ceph rook-release/rook-ceph -f rook-ceph.yaml
helm install --create-namespace --namespace rook-ceph rook-ceph-cluster    --set operatorNamespace=rook-ceph rook-release/rook-ceph-cluster -f rook-ceph-cluster.yaml

删除集群
helm delete --namespace rook-ceph rook-ceph-cluster
helm delete --namespace rook-ceph rook-ceph
for CRD in $(kubectl get crd -n rook-ceph | awk '/ceph.rook.io/ {print $1}'); do
    kubectl get -n rook-ceph "$CRD" -o name | \
    xargs -I {} kubectl patch -n rook-ceph {} --type merge -p '{"metadata":{"finalizers": [null]}}'
done


ceph osd pool set mypool size 1
ceph osd pool create <pool_name> <pg_num> --size=<replica_size>
ceph config set global mon_warn_on_pool_no_redundancy false

radosgw-admin user create --uid=aas --display-name=aas
radosgw-admin bucket list 
radosgw-admin bucket list --uid=aas
radosgw-admin metadata get bucket:aas
radosgw-admin bucket link --uid=aas --bucket=aas --bucket-id=198b9019-fb0d-4bb4-b4b3-3a750f594258.23849388.1
radosgw-admin subuser create --uid=aas --subuser=test --access=read
radosgw-admin user info --uid=aas
radosgw-admin subuser rm --subuser=aas:test
radosgw-admin key create --subuser=aas:test --key-type=s3 --gen-access-key --gen-secret   s3
radosgw-admin key create --subuser=johndoe:swift --key-type=swift --gen-secret      swift 
radosgw-admin bucket rm --bucket=s3test1

dashboard 密码
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo

罗列出当前系统下所有的bucket信息 
# radosgw-admin bucket list

查看具体某个BUCKET属性
# radosgw-admin bucket stats --bucket=aas

检查对应BUCKET在index中是否存在
# rados -p .rgw.buckets.index ls - | grep "default.784974.1"

查看对应INDEX中记录的key
# rados -p .rgw.buckets.index listomapkeys .dir.default.784974.1

统计文件数量
rados -p .rgw.buckets.index listomapkeys  .dir.default.104766.19 | wc -l

查看对应索引信息存放的物理位置
# ceph osd map .rgw.buckets.index   .dir.default.104766.19

user create    新建一个用户
执行下面的命令新建一个用户 (S3 接口):
radosgw-admin user create --uid={username} --display-name="{display-name}" [--email={email}]
实例:
radosgw-admin user create --uid=johndoe --display-name="John Doe" --email=john@example.com
subuser create  新建一个子用户

为了给用户新建一个子用户 (Swift 接口)  ,你必须为该子用户指定用户的 ID(–uid={username}),子用户的 ID 以及访问级别:
radosgw-admin subuser create --uid={uid} --subuser={uid} --access=[ read | write | readwrite | full ]
实例如下:
radosgw-admin subuser create --uid=johndoe --subuser=johndoe:swift --access=full
Note :full 并不表示 readwrite, 因为它还包括访问权限策略.                                                                

user modify 修改用户信息
要修改一个用户的信息,你必须指定用户的 ID (–uid={username}),还有 你想要修改的属性值。典型的修改项主要是 access 和secret 密钥,邮件地址,显 示名称和访问级别。举例如下:
radosgw-admin user modify --uid=johndoe --display-name="John E. Doe”
subuser modify 修改子用户信息

要修改子用户的信息, 使用 subuser modify 子命令并且执行子用户的 ID. 举例如下:
radosgw-admin subuser modify --uid=johndoe:swift --access=full
user info 获取用户信息

要获取一个用户的信息,你必须使用 user info 子命令并且制定一个用户 ID(--uid={username}) 
radosgw-admin user info --uid=johndoe

user rm 删除用户
删除用户时,这个用户以及他的子用户都会被删除。当然,如果你愿意,可以只删除子用户。要删除用户(及其子用户),可使用 user rm 子命令并指明用户 ID :
radosgw-admin user rm --uid=johndoe
只想删除子用户时,可使用 subuser rm 子命令并指明子用户 ID 。
radosgw-admin subuser rm --subuser=johndoe:swift

user suspend 停用用户
当你创建了一个用户,用户默认情况下是处于启用状态的。然而,你可以暂停用户权 限并在以后随时重新启用它们。暂停一个用户,使用 user suspend 子命令 然后指定用户的 ID:
radosgw-admin user suspend --uid=johndoe
Note: 停用一个用户后,它的子用户也会一起被停用.                                                          

user enable 启用用户
要重新启用已经被停用的用户,使用 user enable 子命令并指明用户的 ID.
radosgw-admin user enable --uid=johndoe
user check 检查用户信息
radosgw-admin user check --uid=johndoe
user stats  获取用户用量统计信息
radosgw-admin user stats --uid=uid

caps add 添加管理权限
执行下面的命令为一个用户添加管理权限:
radosgw-admin caps add --uid={uid} --caps={caps}
你可以给一个用户添加对用户、bucket、元数据和用量(存储使用信息)等数据的 读、写或者所有权限。举例如下:
—caps=“[users|buckets|metadata|usage|zone]=[*|read|write|read, write]”
实例如下:
radosgw-admin caps add --uid=johndoe --caps="users=*"

caps rm 删除管理权限
要删除某用户的管理权限,可用下面的命令:
radosgw-admin caps rm --uid=johndoe --caps={caps}

key create 新建访问密钥
用户和子用户要能使用 S3 和Swift 接口,必须有 access 密钥。在你新 建用户或者子用户的时候,如果没有指明 access 和 secret 密钥,这两 个密钥会自动生成。你可能需要新建 access 和/或 secret 密钥,不管是 手动指定还是自动生成的方式。你也可能需要删除一个 access 和 secret 。可用的选项有:
• –secret=<key> 指明一个 secret 密钥 (e.即手动生成).
• –gen-access-key 生成一个随机的 access 密钥 (新建 S3 用户的默认选项).
• –gen-secret 生成一个随机的 secret 密钥.
• –key-type=<type> 指定密钥类型. 这个选项的值可以是: swift, s3
要新建密钥,需要指明用户 ID.
radosgw-admin key create --uid=johndoe --key-type=s3 --gen-access-key --gen-secret
你也可以使用指定 access 和 secret 密钥的方式.
对于用户来说,需要指明用户的 ID 以及新建的密钥类型为 s3 。要为子用户新建一个密钥,则需要指明子用户的 ID以及密钥类型为 swift 。实例如下:
radosgw-admin key create --subuser=johndoe:swift --key-type=swift --gen-secret

key rm 删除密钥
要删除一个 access 密钥, 也需要指定用户 ID.
radosgw-admin key rm --uid=johndoe

bucket list 罗列所有桶
radosgw-admin bucket list
默认会罗列集群所有桶,查看某一个用户,需要指定用户ID.
radosgw-admin bucket list --uid=johndoe
bucket link 把桶关联到指定用户
radosgw-admin metadata get bucket:s3test1
radosgw-admin bucket link --uid=johndoe --bucket=s3test1 --bucket-id=xxx
note:一个桶只能连接给一个用户。连接给一个用户了,上个用户会自动取消链接    
bucket ulink 取消连接
radosgw-admin bucket unlink --uid=johndoe --bucket=s3test1
bucket stats 返回桶的统计信息
输出bucket详细信息
radosgw-admin bucket stats
查看某个bucket具体信息
radosgw-admin bucket stats --bucket=s3test1
输出信息中,有bucket的objects个数和占用空间。
bucket rm 删除一个桶
radosgw-admin bucket rm --bucket=s3test1
默认只能删空的bucket,强制删除非空的bucket需要加上“--purge-objects ”选项:
radosgw-admin bucket rm --bucket=s3test1 --purge-objects
bucket check 查看桶的索引信息
radosgw-admin bucket check --bucket=s3test1
object rm 删除一个对象
radosgw-admin object rm --object=1.jpg --bucket=s3test3
object unlink 从桶索引里去除对象
查看源代码打印帮助
radosgw-admin object unlink --bucket=s3test3 —object=1.jpg