登录
  • 人们都希望被别人需要 却往往事与愿违
  • 中国股市比赌场还不如 -- 因为在中国股市,某些人可以看别人的底牌 @吴敬琏

vps 硬盘不够了怎么办

Linux Benny 小土豆 8674 次浏览 6420 字 12 个评论
文章目录 [显示]

自从搭建了一个图床之后,我开始发现 vps 的硬盘空间开始慢慢不够用了。随着时间的增长,上传的图片也越来越多。贫穷总是会限制我的想象力,那么有哪些解决方案呢?

世界加钱可及

加钱升级配置

加钱,去服务商那里升级配置就好了,好多钱钱~

使用 block storage

有些服务商可能提供类似 block storage 这种存储服务(如 vultr、DigitalOcean),那就花钱钱买点,然后挂载上就好了。假如不提供这些服务的话,可以考虑试试 Google Cloud Storage,然后挂载到本地,价格也还是可以接受的~

使用 rclone 挂载网络硬盘

可是我是穷人唉,$1 都出不起,那该怎么办呢…… 可不可以把 Google Drive、OneDrive、Dropbox 什么的挂载上呢?Google Drive 有 15G,Dropbox 有 2G,OneDrive 有 5G,这加起来就是 22G,那就是 $2.2 呢!

淘宝花个几块钱扩容什么的,那就是血赚啊!

rclone 挂载 Google Drive 什么的很容易,有很多人写文件介绍过,比如说这篇,只不过有两点需要注意的:

使用 mount 挂载之后,这个程序会 “阻塞”,另开一个窗口df –h就会发现有了

vps硬盘不够了怎么办

5T 滑稽?

但是咱也不能一直开着,跑个 screen 也不好,所以还是写个 systemd 单元文件吧

  1. [Unit]
  2. Description=Google Drive mounter
  3. After=network.target network-online.target nss-lookup.target
  4.  
  5. [Service]
  6. Restart=on-failure
  7. Type=simple
  8. ExecStart=/usr/bin/rclone mount gdrive_goldstein:/ /mnt/gdrive/ --allow-non-empty --vfs-cache-mode writes --allow-other
  9.  
  10. [Install]
  11. WantedBy=multi-user.target

非常需要注意这个--allow-other参数,如果没有的话,从 nginx 的 webroot 下做过来的符号链接 www 用户无权访问,那就 403 了哦

iSCSI

这网络存储有的时候可能也有点不太够(5T 都不够吗?),那该怎么办呢?不如买个大硬盘的 vps,然后试试 iSCSI!(看来这 RHCE 是没白考啊ε=ε=ε=(~ ̄▽ ̄)~

iSCSI 是个啥呢?Internet 小型计算机系统接口,简单理解就是客户端可以通过网络让自己有 / dev/sd * 这样的 “真实” 的物理设备,然后随便格式化挂载什么的。

iSCSI 一般来说是局域网使用的,一般不会跨公网玩,因为这东西对延迟丢包有点敏感。当然了用是能用的,只不过配置起来有点麻烦,而且传输过程是不加密的。(′д`)… 彡… 彡

iSCSI 传输不是加密的这个消息不太好,但是有一些解决方案的,比如套个 IPSec 啦,比如走个 SSH 隧道啦。

本着灵活应用的道理,咱就来挂载个玩玩……

概念解析

target – 理解成服务器;initiator – 理解成客户端

准备 “硬盘”

对于服务端来说,提供服务的 “硬盘” 可以选择块设备(硬盘啊,U 盘啊什么的),也可以选择文件设备,甚至内存够大做 ramdisk 都是可以的~

为了方便扩展,我们这里就做一个逻辑卷,这样以后也可以看心情随时扩容的。

首先~ 登录到 server,需要进行一下分区,总之就是搞出来一个 sdb2 这种分区做逻辑卷。使

分区

用 fdisk 进行类似操作:

  1. root@server:~# fdisk /dev/sda
  2. Welcome to fdisk (util-linux 2.31.1).
  3. Changes will remain in memory only, until you decide to write them.
  4. Be careful before using the write command.
  5.  
  6. Command (m for help): p
  7. Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
  8. Units: sectors of 1 * 512 = 512 bytes
  9. Sector size (logical/physical): 512 bytes / 512 bytes
  10. I/O size (minimum/optimal): 512 bytes / 512 bytes
  11. Disklabel type: gpt
  12. Disk identifier: DCBEF2AD-7269-4B63-BA34-AE2F15A6D9F7
  13. Device Start End Sectors Size Type
  14. /dev/sda1 2048 4095 2048 1M BIOS boot
  15. /dev/sda2 4096 20975615 20971520 10G Linux filesystem
  16.  
  17. Command (m for help): n
  18.  
  19. Partition number (3-128, default 3):
  20. First sector (20975616-41943006, default 20975616):
  21. Last sector, +sectors or +size{K,M,G,T,P} (20975616-41943006, default 41943006):
  22. Created a new partition 3 of type 'Linux filesystem' and of size 10 GiB.
  23.  
  24. Command (m for help): w
  25.  
  26. The partition table has been altered.
  27. Syncing disks.

输入partprobe更新分区表,这里新分区为 sda3,大小 10G

创建逻辑卷

  1. root@server:~# pvcreate /dev/sda3
  2. Physical volume "/dev/sda3" successfully created.

默认的 Volume Group 大小是 4MiB,当然这个创建 vg 的时候可以改。

  1. root@server:~# vgcreate idata /dev/sda3
  2. Volume group "idata" successfully created

创建 Logic Volume 的时候,n 表示名字;大小方面,可以指定是多少个 PE,也可以直接写大小,使用 l 指定多少个 PE,256 个也就是 1G 了,L 指定大小,

  1. root@server:~# lvcreate -n iscsi_data -l 256 idata
  2. Logical volume "iscsi_data" created.
  3.  
  4. # 直接指定3G
  5. root@server:~# lvcreate -n test -L 3G idata
  6. Logical volume "test" created.

查看一下 确定信息无误

  1. root@server:~# lvdisplay
  2.  
  3. --- Logical volume ---
  4. LV Path /dev/idata/iscsi_data
  5. LV Name iscsi_data
  6. VG Name idata
  7. LV UUID ueP2uS-zEOG-6B1q-5GuD-9L5f-1ZyZ-86E4ee
  8. LV Write Access read/write
  9. LV Creation host, time server, 2019-06-23 06:19:06 +0000
  10. LV Status available
  11. # open 0
  12. LV Size 1.00 GiB
  13. Current LE 256
  14. Segments 1
  15. Allocation inherit
  16. Read ahead sectors auto
  17. - currently set to 256
  18. Block device 253:0
叮咚提示:

有些 vps 上来就是一个 /,这种情况下根本用不了 fdisk 给分出来空间的。那咋办呢?有这么几种思路,fileio,livecd 用 gparted,手动重装系统

配置 target

就假定服务端和客户端都是 Ubuntu 啦,16.04 之后应该操作都差不多的

  1. apt install targetcli-fb

输入targetcli进入交互页面,输入 ls 可以看下大体情况

vps硬盘不够了怎么办

我们要做这么几件事情:创建 backstore,给 backstore 增加 LUNS,ACL,PORTAL

创建 backstore

创建 block 设备

  1. /backstores/block create name=client1_data dev=/dev/idata/iscsi_data

/dev/idata/iscsi_data 就是我们刚刚创建的逻辑卷,name 是名字

创建 iSCSI

  1. /iscsi create wwn=iqn.2019-06.com.bennythink:server

回车之后会发现自动帮我们创建好了 portal

创建 luns,这里的client1_data就是我们第一步创建的 name

  1. /iscsi/iqn.2019-06.com.bennythink:server/tpg1/luns create /backstores/block/client1_data

创建 acl

  1. /iscsi/iqn.2019-06.com.bennythink:server/tpg1/acls create wwn=iqn.2019-06.com.bennythink:client1

这几步都做完了之后,ls 一下,大概的结构应该是这样的:

vps硬盘不够了怎么办

saveconfig保存退出

配置客户端

客户端的配置相比之下就简单多了,只需要改下配置文件就好了

安装与修改配置

  1. apt install open-iscsi
  2. # 编辑/etc/iscsi/initiatorname.iscsi
  3. vim /etc/iscsi/initiatorname.iscsi
  4. # 把InitiatorName改成我们ACL中配置的那个,也就是iqn.2019-06.com.bennythink:client1
  5. InitiatorName=iqn.2019-06.com.bennythink:client1
  6. # 设置自动login
  7. vim /etc/iscsi/iscsid.conf
  8. # 原来是manual
  9. node.startup = automatic

启动服务

  1. systemctl restart iscsi
  2. systemctl restart iscsid
  3. systemctl enable iscsid

发现与登录节点

server 可以写服务端的域名,或者 IP 也可以

  1. root@client:~# iscsiadm --mode discoverydb --type sendtargets --portal server --discover
  2. 172.21.174.180:3260,1 iqn.2019-06.com.bennythink:server
  3.  
  4. # 把上一步拿到的iqn写到这里
  5. root@client:~# iscsiadm --mode node --targetname iqn.2019-06.com.bennythink:server --portal server:3260 --login
  6. Logging in to [iface: default, target: iqn.2019-06.com.bennythink:server, portal: 172.21.174.180,3260] (multiple)
  7. Login to [iface: default, target: iqn.2019-06.com.bennythink:server, portal: 172.21.174.180,3260] successful.

此时就应该多出来一个/dev/sdb

分区、格式化与挂载

使用 fdisk 对 sdb 进行分区,这里想怎么分都行,我就直接都分一个主分区了

  1. root@client:~# fdisk /dev/sdb
  2. Welcome to fdisk (util-linux 2.31.1).
  3. Changes will remain in memory only, until you decide to write them.
  4. Be careful before using the write command.
  5. Device does not contain a recognized partition table.
  6. Created a new DOS disklabel with disk identifier 0x2afb442f.
  7.  
  8. Command (m for help): n
  9. Partition type
  10. p primary (0 primary, 0 extended, 4 free)
  11. e extended (container for logical partitions)
  12. Select (default p):
  13. Using default response p.
  14. Partition number (1-4, default 1):
  15. First sector (8192-2097151, default 8192):
  16. Last sector, +sectors or +size{K,M,G,T,P} (8192-2097151, default 2097151):
  17. Created a new partition 1 of type 'Linux' and of size 1020 MiB.
  18.  
  19. Command (m for help): w
  20. The partition table has been altered.
  21. Calling ioctl() to re-read partition table.
  22. Syncing disks.

进行格式化、挂载

  1. mkfs.ext4 /dev/sdb1
  2. mount /dev/sdb1 /mnt/data/

vps硬盘不够了怎么办

重启之后自动挂载

为了确保重启之后自动挂载,我们需要更改 fstab

  1. /dev/sdb1 /mnt/data ext4 defaults,_netdev 0 0

安全使用 iSCSI

由于 iSCSI 的传输数据的过程并不是加密的,所以如果跨公网使用,给人的感觉总是不好。为了解决这一问题,我们可以在客户端挂个 VPN 到服务端,可以用 SSH 隧道,可以用 IPSec 保护 iSCSI,也可以加密 sdb(比如用 LUKS、VeraCrypt 等呗)

咱这里就开个 SSH 隧道吧!要在配置客户端之前做好哦

修改服务端配置vim /etc/ssh/sshd_config,修改如下配置

  1. PermitTunnel yes

然后重启 sshd

  1. systemctl restart sshd

然后输入如下命令,其中root@server替换成自己的服务器

  1. sudo -E \
  2. ssh -F /dev/null \
  3. -o PermitLocalCommand=yes \
  4. -o LocalCommand="ifconfig tun0 172.18.0.2 pointopoint 172.18.0.1 netmask 255.255.255.0" \
  5. -o ServerAliveInterval=60 \
  6. -w 0:0 root@server \
  7. 'sudo ifconfig tun0 172.18.0.1 pointopoint 172.18.0.2 netmask 255.255.255.0; hostname; echo tun0 ready'

之后再开一个窗口,discover & login

  1. iscsiadm --mode discoverydb --type sendtargets --portal 172.18.0.1 --discover
  2. iscsiadm --mode node --targetname iqn.2019-06.com.bennythink:server --portal 172.18.0.1:3260 login

当然理想方式是用 key,然后 systemd 管这个 SSH Tunnel 啦!

(′д`)… 彡… 彡还是用 wireguard

iSCSI 空间不够了怎么办

还记得我们是使用的 Logical Volume 创建的吗!此时只需要lvextend -L 10G /dev/idata/iscsi_data就可以把分区调整为 10G,然后客户端那边 fdisk 就能看见

 

其他类似技术

NFS、Samba

同理?

GlusterFS

萌新不懂,萌新瑟瑟发抖

总结

折腾一大圈,不还是得买大盘鸡吗? 还不是贫穷限制了我的想象力

 


文章版权归原作者所有丨本站默认采用 CC-BY-NC-SA 4.0 协议进行授权 |
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/vps-more-disk.html
喜欢 (23)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(12) 个小伙伴在吐槽
  1. vultr 还可以搭 VPS 么,为什么我搭了可以 ping 通但是 ss 连接没流量...
    Misaki2019-08-21 13:30 回复
    • ssh 通吗,如果 ssh 通的话,检查你的 ss 配置,换个常用端口,检查防火墙
      Benny 小土豆 2019-08-21 13:32 回复
  2. 有那么多时间折腾还不如花钱
    anomymous2019-07-03 22:57 回复
  3. https://he.net/colocation.html ,請(
    TJM2019-06-25 06:49 回复
    • 请给我打 100 美元
      Benny 小土豆 2019-06-25 08:52 回复
  4. 土豆最近好高产啊~
    ホロ 2019-06-24 13:34 回复
    • ? 看一眼这里 然后再说啊
      Benny 小土豆 2019-06-24 13:45 回复
      • https://gitlab.com/KenOokamiHoro/pelican-yoitsu/commits/master 半斤八两的咕咕咕(
        ホロ 2019-06-24 13:48 回复
        • 咕咕咕我是半斤
          Benny 小土豆 2019-06-24 13:53
  5. 土豆最近好高产啊~
    johnpoint2019-06-23 17:11 回复
您直接访问了本站! 莫非您记住了我的域名. 厉害~ 我倍感荣幸啊 嘿嘿