TomKate
V2EX  ›  Java

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

  •  
  •   TomKate · Mar 4, 2019 · 7267 views
    This topic created in 2804 days ago, the information mentioned may be changed or developed.

    如题。

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