如何通过 Java 获取远端服务器剩余磁盘大小? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TomKate
V2EX    Java

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

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

    如题。

    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     Solana     2408 人在线   最高记录 6679       Select Language
    创工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 01:26 PVG 09:26 LAX 18:26 JFK 21:26
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86