V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TomKate
V2EX  ›  Java

如何通过 Java 获取远端服务器剩余磁盘大小?

  •  
  •   TomKate · 2019-03-04 10:56:17 +08:00 · 5979 次点击
    这是一个创建于 2117 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题。

    28 条回复    2019-03-05 14:33:12 +08:00
    TomKate
        1
    TomKate  
    OP
       2019-03-04 11:02:56 +08:00
    目前了解了以下两种方式
    1.远端运行一个 server 程序记录剩余磁盘大小。
    2.通过 ftp 的方式。
    各位前辈,还有没有其它最优解?
    lazyfighter
        2
    lazyfighter  
       2019-03-04 11:05:02 +08:00
    每个机器都部署一个 agent 但我觉得 java 不适合 ,go 应该适合一点
    hakim
        3
    hakim  
       2019-03-04 11:07:36 +08:00
    使用 smis/snmp 协议即可
    Mazexal
        4
    Mazexal  
       2019-03-04 11:15:19 +08:00
    java 可以远程执行脚本命令, 然后直接得到结果的
    TomKate
        5
    TomKate  
    OP
       2019-03-04 11:17:17 +08:00
    @hakim 搜了一下发现网上的资源很少,能详细的说下怎么通过 java 来实现吗?
    TomKate
        6
    TomKate  
    OP
       2019-03-04 11:19:20 +08:00
    @Mazexal 远端是 windows server。。。
    ForestV
        7
    ForestV  
       2019-03-04 11:20:28 +08:00
    jni 配合 sigar.jar 和相关的扩展包
    flame90
        8
    flame90  
       2019-03-04 11:21:16 +08:00
    sigar 了解一下
    airfling
        9
    airfling  
       2019-03-04 11:26:02 +08:00
    snmp,或者 sigar 都可以
    TomKate
        10
    TomKate  
    OP
       2019-03-04 11:29:26 +08:00
    @airfling sigar 看了下都是获取本机的例子。可以通过 IP 来获取吗?远端不进行部署?
    msg7086
        11
    msg7086  
       2019-03-04 11:29:57 +08:00
    远程 wmi ?
    caryqy
        12
    caryqy  
       2019-03-04 11:36:05 +08:00
    反过来呢,远端主动向你上报磁盘信息
    TomKate
        13
    TomKate  
    OP
       2019-03-04 11:38:41 +08:00
    可能是我描述的不够详细,主要是想通过 java 来实现获取远端文件服务器的磁盘剩余大小。也就是说获取网络位置的磁盘大小。
    TomKate
        14
    TomKate  
    OP
       2019-03-04 11:39:46 +08:00
    不在远端进行任何部署
    moximo
        15
    moximo  
       2019-03-04 12:12:59 +08:00 via Android
    老哥,想都不用想那些骚操作,直接 java
    的 ssh 客户端上去 echo 你想要的结果就行啦。
    moonblog
        16
    moonblog  
       2019-03-04 13:49:50 +08:00
    @TomKate 远程不做任何部署,却想获取磁盘信息,兄弟我觉得你可以当黑客了
    部署的话,agent+sigar 实现,我做过
    yinqi025
        17
    yinqi025  
       2019-03-04 13:55:44 +08:00
    我觉得楼主在飘~~~,服务端没有任何的宿主或者服务端的东西 是不可能有结果的
    maokabc
        18
    maokabc  
       2019-03-04 14:01:25 +08:00 via Android
    直接用 jsch 库,sftp 支持 statvfs,只要开了 ssh
    dark3212
        19
    dark3212  
       2019-03-04 14:28:31 +08:00
    服务器是 windows 的话有个思路,就是将远程磁盘共享出来,本地电脑挂载,然后 java 像访问本地磁盘那样访问挂载磁盘应该可以。
    但是安全性堪忧,特别是广域网。
    qk3z
        20
    qk3z  
       2019-03-04 14:43:58 +08:00 via Android
    snmp 搞定
    rockyou12
        21
    rockyou12  
       2019-03-04 14:51:34 +08:00
    就是监控嘛,其实 lz 你调研下主流的监控软件就知道了,不部署 agent 基本是不可能的。有很多权限、性能的问题
    airfling
        22
    airfling  
       2019-03-04 14:51:44 +08:00
    对于 linux 那你可以用 jsch 或者开启 snmp 使用 snmp。同样的对于 windows 你可以用 snmp 协议或者 telnet 协议,远程不能部署,只用走这两种协议才可以获取到
    laminux29
        23
    laminux29  
       2019-03-04 15:33:30 +08:00
    用 Thrift 做一个 Client-Server 的 RPC。别用 snmp,第一不准,第二黑箱不知道细节,会给后期性能造成大影响。因为精确统计磁盘,对性能影响大。
    tao147258
        24
    tao147258  
       2019-03-04 15:53:44 +08:00
    snmp 比较老了,装个 zabbix 之类的吧
    lazyfighter
        25
    lazyfighter  
       2019-03-04 19:33:44 +08:00
    这能实现? server 端啥都不装,不装 service 没有办法 pull,又不装 agent 又没办法 push,拿数据怎么搞?
    jhsea3do
        26
    jhsea3do  
       2019-03-04 20:19:21 +08:00
    1、有 agent , zabbix / jenkins (java)
    2、无 agent, ansible / jsch (java)
    lff0305
        27
    lff0305  
       2019-03-04 22:26:18 +08:00 via Android
    不想远程装东西的话 jni 配合 perfmon api 或者 wmi api 远程需要建立连接,用户名密码,以前做过肯定可行,问题是
    Home 版貌似不行,再就是 win 上需要权限比较高的用户才行,记得至少是 power user 组,要是客户比较严的话不可能给你这个用户
    DarrenF
        28
    DarrenF  
       2019-03-05 14:33:12 +08:00   ❤️ 1
    @dark3212 这个我试过 挂载出来好像不行,Java 依然只能读取本地磁盘,用 File ("\\网络路径文件夹")可以读取到网络路径文件所在磁盘剩余大小:
    File win = new File("\\\\192.xxx.xxx.xxx\\share");
    System.out.println(win.getPath());
    System.out.println(win.getName());
    System.out.println("Free space = " + (win.getFreeSpace() / (1024 * 1024)) / 1024 + "G");
    // 显示 GB 大小
    System.out.println("Free space = " + win.getFreeSpace());
    System.out.println("Usable space = " + win.getUsableSpace());
    System.out.println("Total space = " + win.getTotalSpace());
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3206 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 12:23 · PVG 20:23 · LAX 04:23 · JFK 07:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.