甲骨文“救砖”过程

发布于 2020-11-03  421 次阅读


原文地址

申请的甲骨文免费 VPS 历时两个小时就被我玩炸了,昨晚救砖失败,今天再试一下。

记录下来

甲骨文的机器是 “模块化” 式的

IP 引导卷 (系统盘) 等等都可以更换 / 分离

引导卷可以分离出来,作为其他机器的附加硬盘

所以当鸡鸡玩炸了,账号上还有好的机器,就可以这样做

将坏盘挂载上,再将好盘 dd 到坏盘上,重新挂载回坏鸡身上。即可。

具体操作过程

分离引导卷

甲骨文后台 => 计算 >> 实例 >> 实例详细信息 >> 停止 (即关机)
甲骨文后台 => 计算 >> 实例 >> 实例详细信息 >> 引导卷 >> 分离

挂载引导卷到第二台机器

甲骨文后台 => 计算 >> 实例 >> 实例详细信息 >> 附加的块存储卷

SSH 终端操作

附加命令 (具体以甲骨文后台提示的命令为准,不同地区的机器可能有所不同)

sudo iscsiadm -m node -o new -T iqn.2015-02.oracle.boot:uefi -p 169.254.2.4:3260
sudo iscsiadm -m node -o update -T iqn.2015-02.oracle.boot:uefi -n node.startup -v automatic
sudo iscsiadm -m node -T iqn.2015-02.oracle.boot:uefi -p 169.254.2.4:3260 -l

dd 命令写系统

sda dd 到 sdb
dd if=/dev/sda of=/dev/sdb bs=10M count=100000
查看进度

新开一个 SSH 窗口

watch -n 5 pkill -USR1 ^dd$

回到执行 dd 命令的窗口即可查看进度

dd 完成将引导卷挂载回坏鸡上

分离命令 (具体以甲骨文后台提示的命令为准,不同地区的机器可能有所不同)

sudo iscsiadm -m node -T iqn.2015-02.oracle.boot:uefi -p 169.254.2.4:3260 -u
sudo iscsiadm -m node -o delete -T iqn.2015-02.oracle.boot:uefi -p 169.254.2.4:3260

甲骨文后台 => 计算 >> 实例 >> 实例详细信息 >> 附加的块存储卷 >> 分离

回到坏鸡的面板
甲骨文后台 => 计算 >> 实例 >> 实例详细信息 >> 引导卷 >> 附加

开机即可

Linux上open-iscsi 的安装,配置和使用

原文地址

关于 open-iscsi

open-iscsi 是一个实现 RFC3720 iSCSI 协议的高性能 initiator 程序。iSCSI 使得访问 SAN 上的存储不再只能依赖 Fibre Channel,也可以通过 TCP 协议和以太网络。在很多 Linux 平台都可以方便的下载到 open-iscsi 包。

有了它就可以在 Linux 上直接连接远端的 block device 了,就像使用本地 block device 一样方便。

目前是 open-iscsi 包含两个部分:内核部分和用户空间部分

  • Kernel part(内核)

实现了 scsi read/write 功能,包含 3 个内核模块 scsi_transport_iscsi.ko, libiscsi.ko and iscsi_tcp.ko,在安装了 open-iscsi 的 Linux 上,可以查看到。

$ sudo lsmod | grep iscsi -i
iscsi\_trgt            101664  5 
iscsi\_tcp              17580  0 
libiscsi\_tcp           21554  1 iscsi\_tcp
libiscsi               48004  3 libiscsi\_tcp,iscsi\_tcp,ib\_iser
scsi\_transport\_iscsi    77478  4 iscsi\_tcp,ib\_iser,libiscsi
scsi\_mod              191405  12 sg,scsi\_transport\_spi,scsi\_dh,scsi\_transport\_iscsi,libata,mptspi,sd\_mod,sr\_mod,iscsi\_tcp,mptscsih,ib\_iser,libiscsi
  • User space part(用户空间)

主要完成如:配置管理,iSCSI target 的自动发现,登录、登出,错误处理和连接保持等。用户通过 iscsiadm 来管理 initiator 端与 target 端的连接。下面是管理工具 iscsiadm 的使用帮助。

$ sudo iscsiadm --help
iscsiadm -m discoverydb \[ -hV \] \[ -d debug\_level \] \[-P printlevel\] \[ -t type -p ip:port -I ifaceN ... \[ -Dl \] \] | \[ \[ -p ip:port -t type\] \[ -o operation \] \[ -n name \] \[ -v value \] \[ -lD \] \] 
iscsiadm -m discovery \[ -hV \] \[ -d debug\_level \] \[-P printlevel\] \[ -t type -p ip:port -I ifaceN ... \[ -l \] \] | \[ \[ -p ip:port \] \[ -l | -D \] \] 
iscsiadm -m node \[ -hV \] \[ -d debug\_level \] \[ -P printlevel \] \[ -L all,manual,automatic \] \[ -U all,manual,automatic \] \[ -S \] \[ \[ -T targetname -p ip:port -I ifaceN \] \[ -l | -u | -R | -s\] \] \[ \[ -o  operation  \] \[ -n name \] \[ -v value \] \]
iscsiadm -m session \[ -hV \] \[ -d debug\_level \] \[ -P  printlevel\] \[ -r sessionid | sysfsdir \[ -R | -u | -s \] \[ -o operation \] \[ -n name \] \[ -v value \] \]
iscsiadm -m iface \[ -hV \] \[ -d debug\_level \] \[ -P printlevel \] \[ -I ifacename | -H hostno|MAC \] \[ \[ -o  operation  \] \[ -n name \] \[ -v value \] \] \[ -C ping \[ -a ip \] \[ -b packetsize \] \[ -c count \] \[ -i interval \] \]
iscsiadm -m fw \[ -d debug\_level \] \[ -l \]
iscsiadm -m host \[ -P printlevel \] \[ -H hostno|MAC \] \[ \[ -C chap \[ -o operation \] \[ -v chap\_tbl\_idx \] \] | \[ -C flashnode \[ -o operation \] \[ -A portal\_type \] \[ -x flashnode\_idx \] \[ -n name \] \[ -v value \] \] \]
iscsiadm -k priority

安装 open-iscsi

  • Debian/Ubuntu

sudo apt-get install open-iscsi
  • Redhat/Centos/Suse

yum install iscsi-initiator-utils

安装完成后,比较重要的配置文件有两个: /etc/iscsi/iscsid.conf  以及 /etc/iscsi/initiatorname.iscsi 

iscsi 的基本配置文件

  • /etc/iscsi/initiatorname.iscsi 

这个文件包含 host 的 initiator IQN,在很多企业级存储上都要用到这个,否则无法访问存储上的资源。

$ sudo cat /etc/iscsi/initiatorname.iscsi 
## DO NOT EDIT OR REMOVE THIS FILE!
## If you remove this file, the iSCSI daemon will not start.
## If you change the InitiatorName, existing access control lists
## may reject this initiator.  The InitiatorName must be unique
## for each iSCSI initiator.  Do NOT duplicate iSCSI InitiatorNames.
InitiatorName=iqn.1993-08.org.debian:01:2b22ec4c44d
  • /etc/iscsi/iscsid.conf 

这个文件包含 open-iscsi 的配置,下面会提到一些个人经常遇到的一些设置

node.startup = [automatic | manual ]

\# To request that the iscsi initd scripts startup a session set to "automatic".
# node.startup = automatic
#
# To manually startup the session set to "manual". The default is manual.
node.startup = manual

如果 node.start = automatic,所有 login 过的 session 在下次重启的时候都会再次被 login。

node.conn[0].timeo.login_timeout = < 以秒记得超时 >

node.conn\[0\].timeo.login\_timeout = 15

上面是单次登录的超时时间

node.session.initial_login_retry_max = <登录重试次数>

node.session.initial\_login\_retry\_max = 8

登录失败后的最大重试次数

当然 /etc/iscsi/iscsid.conf 的配置绝大多数都可以通过  iscsiadm --mode node --op  来对特定的 node/session 针对性的配置,后面会提到。

iscsiadm 的使用

iscsiadm 使用基本分 3 个步骤:发现 (discovery),登录 (login),扫描 (rescan)

在使用 iscsiadm 的过程中有两个名词要注意下

  • target portal:  格式一般是 :, 比如  192.168.183.129:3260
  • target IQN: 指服务器端的 iqn- 打头的一串字符 iqn.2001-04.com.example:storage.lun2

portal 和 IQN 可以唯一确定一个 storage 的 target。

1. Discovery

discovery 只要知道 storage 上的 target portal 就可以发现所有暴露的 portal 和 iqn。

$ sudo iscsiadm -m discovery -t sendtargets -p 192.168.183.129
192.168.183.129:3260,1 iqn.2001-04.com.example:storage.lun2
192.168.183.129:3260,1 iqn.2001-04.com.example:storage.lun1

上面发现 绿色 的就是 storage 上的所有 target portals, 红色 就是 IQN

2. login

在第一步中发现的 target 都会保存在本地的数据库中,可以用 sudo iscsiadm -m node 看到。

  • 登录全部 target

如果你要登录第一步中所有的 portal,可以直接用下面的命令一键登录:

$ sudo iscsiadm -m node --login
Logging in to \[iface: default, target: iqn.2001-04.com.example:storage.lun2, portal: 192.168.183.129,3260\] (multiple)
Logging in to \[iface: default, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260\] (multiple)
Login to \[iface: default, target: iqn.2001-04.com.example:storage.lun2, portal: 192.168.183.129,3260\] successful.
Login to \[iface: default, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260\] successful.
  • 登录特定的 target

$ sudo iscsiadm -m node -T iqn.2001-04.com.example:storage.lun1 -p 192.168.183.129:3260 --login
Logging in to \[iface: default, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260\] (multiple)
Login to \[iface: default, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260\] successful.
  • 查看登录的 session

$ sudo iscsiadm -m session
tcp: \[3\] 192.168.183.129:3260,1 iqn.2001-04.com.example:storage.lun1 (non-flash)

注意,在默认配置下,登录的 session,重启是不会再次登录的,如果要想登录的 session 自动登录,一种方式是,前面提到的设置 node.start = automatic 

  • 设置 session 自动登录

$ sudo iscsiadm -m node -T iqn.2001-04.com.example:storage.lun2 -p 192.168.183.129:3260 --op update -n node.startup -v automatic

# 查看session的设置
$ sudo iscsiadm -m node -T iqn.2001-04.com.example:storage.lun2 -p 192.168.183.129:3260 | grep node.startup
node.startup = automatic

3. rescan

一旦登录成功,所有分配给当前主机的 LUN 都可以看到了,但有时,新分配的 LUN,LUN 的信息发生变化后,主要不能立即看到,这样就需要 rescan 了  --rescan 。

  • 扫描所有登录的 target/session

$ sudo iscsiadm -m session --rescan
Rescanning session \[sid: 3, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260\]

也可以

  $ sudo iscsiadm -m node --rescan
  Rescanning session [sid: 3, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260]

  • 扫描单个 session

可以通过 session id

$ sudo iscsiadm -m session
tcp: \[3\] 192.168.183.129:3260,1 iqn.2001-04.com.example:storage.lun1 (non-flash)
tcp: \[4\] 192.168.183.129:3260,1 iqn.2001-04.com.example:storage.lun2 (non-flash)

上面的 [3], [4] 都是 session id,直接使用即可:

$ sudo iscsiadm -m session --sid 3 --rescan
Rescanning session \[sid: 3, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260\]

试了下,不可以通过 target 和 iqn 登录,不知道是 bug 还是参数问题:

$ sudo iscsiadm -m node -T iqn.2001-04.com.example:storage.lun1 -p 192.168.183.129:3260 --rescan
Rescanning session \[sid: 3, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.183.129,3260\]
iscsiadm: invalid error code 65280
iscsiadm: Could not execute operation on all sessions: (null)

4. 找到 disk

1. iscsi 连接的 disk 可以通过查询路径  /dev/disk/by-path/ 下的链接

\# ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root  9 Jun  3 03:01 ip-192.168.183.129:3260-iscsi-iqn.2001-04.com.example:storage.lun1-lun-1 -> ../../sdc
lrwxrwxrwx 1 root root  9 Jun  3 03:08 ip-192.168.183.129:3260-iscsi-iqn.2001-04.com.example:storage.lun2-lun-2 -> ../../sdd
lrwxrwxrwx 1 root root  9 Jun  3 01:26 pci-0000:00:10.0-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 Jun  3 01:26 pci-0000:00:10.0-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jun  3 01:26 pci-0000:00:10.0-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jun  3 01:26 pci-0000:00:10.0-scsi-0:0:0:0-part5 -> ../../sda5
lrwxrwxrwx 1 root root  9 Jun  3 01:26 pci-0000:00:10.0-scsi-0:0:1:0 -> ../../sdb

可以看到,在我的测试中,连接的两个 target 分别暴露了一个 LUN 给 host,lun1 和 lun2,对应的 host 上的两个 device 是 /dev/sdc /dev/sdd

2. 也可以通过 sudo fdisk -l  查看 disk:

$ sudo fdisk -l

Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 \* 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 \* 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xcaf795e0

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  \*        2048 80383999 80381952 38.3G 83 Linux
/dev/sda2       80386046 83884031  3497986  1.7G  5 Extended
/dev/sda5       80386048 83884031  3497984  1.7G 82 Linux swap / Solaris

Disk /dev/sdc: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 \* 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/149455400000000003592265eae69d00a6e8560cd2833744e: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 \* 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdd: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 \* 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/149455400000000005277c9d1f32625c43968336de76fc205: 1 GiB, 1073741824 bytes, 2097152 sectors
Units: sectors of 1 \* 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

NOTE: /dev/mapper/*** 是我安装了 multipath-tools 后生成的 device

如果 disk 很多的话,还是推荐第一个方法来确定 disk 路径,否则搞错了,数据丢失可是来不及哭爹喊娘的哦:)

总结:

总的来说,iscsi 的使用还是比较方便,就是一旦长期不用,后面使用的话,一般都只能复制,粘贴了,枯燥不说,还容易出错。

由于我日常的工作中经常跟 open-iscsi、multipath、fc 等等打交道,经常觉得:要发现一个新的 device 步骤非常繁琐。

于是我自己决定开发一个方便的 tool/API,简化跟 stoage 打交道的步骤。项目地址是:https://github.com/peter-wangxu/goock

欢迎大家使用和提供宝贵的意见和建议。

参考资料

https://github.com/open-iscsi/open-iscsi

https://tools.ietf.org/html/rfc7143

如何查看 /dev/sda 下的文件

原文地址

/dev/sda 是指接在 SATA、SCSI 第一个接口上的硬盘。/dev/sda 是指整个硬盘,实际使用中一般都会有分区,也就是 / dev/sda1, /dev/sda2 这样的。肯定有一些分区已经挂载了,先用 df 命令,可以看到各个分区分区被挂载到哪个目录,然后 ls 查看你想要查的目录。
另外,那些没有被挂载的分区,如果你知道是哪些,那直接用 mount 命令挂载到某个目录下,然后用 ls 自己看就好了;
如果不知道还有哪些分区,就用 fdisk 命令查一下:
方法一:sudo fdisk -l
方法二:sudo fdisk  /dev/sda 进入交互模式,然后输入 p

方法三:查看单个硬盘,通过 fdisk -l  /dev/sad1

在 /mnt 下用 mkdir 建立一个空目录:

mkdir /mnt/asd  

挂载:

mount /dev/sda1  /mnt/asd

这样挂载分区到文件系统上,才能看 /mnt/asd 里的东西。
查看:

ls -hl  /mnt/asd

卸载: http://man.linuxde.net/umount
umount /dev/sda1
文件系统:指定要卸载的文件系统或者其对应的设备文件名
通过设备名卸载:

umount -v /dev/sda1  

通过挂载点卸载:

umount -v /mnt/mymount/

删除文件

rm  filename

删除目录

rm -r   filename
rm -rf  filename

-r 就是向下递归,不管有多少级目录,一并删除
-f 就是直接强行删除,不作任何提示的意思

查看文件大小

ls  -l   filename   
ls  -hl   filename   

参数 - h 表示 Human-Readable,使用 GB,MB 等易读的格式方式显示
查看文件夹大小

sudo  du  -sh

参考资料:

https://www.baidu.com/link?url=OzHkCWOtpCZk3Svjw274YOa8KXnYQTlCpdpj7NVT9xXYcEOrq3YTmV1Fgc0_M9Rs&wd=&eqid=bf1caf8d0003c9f7000000065b09016f


或许明日太阳西下倦鸟已归时