欢迎光临
我们一直在努力

Linux设备与存储精读 · L01-03 | 验证环境:Android 设备 + 远程 Linux 服务器怎么分工练

模块:L01 心智模型与命令入口 篇号:L01-03 / 38 预计阅读:35 分钟 主线:Linux 设备与存储


文章目录

    • 本篇目标
    • 30 秒速览
    • 正文
      • 1. 两种环境各干什么
      • 2. Android:从 adb 进 shell
      • 3. 远程服务器:先确认工具在不在
      • 4. 服务器安全练法:文件 + loop
      • 5. 同一问题,两边怎么对照练
      • 6. 权限与「命令在不在」的决策
      • 7. 本专栏后续练习落点(预告)
    • Android 对照
    • 检查清单
    • 练习
      • 判断题(对 / 错)
      • 操作题 A(Android)
      • 操作题 B(远程服务器)
      • 读输出题
    • 本篇边界
    • 下一篇预告
    • L01 模块小结

本篇目标

把后续练习落到两处:Android 设备负责看真机对象与挂载现象;远程 Linux 服务器负责练完整命令选项,并用文件 + losetup 安全模拟块设备。学完能判断「这条命令该在哪跑、缺权限时怎么办、危险操作碰谁」。


30 秒速览

  • Android:adb shell,常见实现是 toybox;适合观察 /dev/block、mount、df、by-name。
  • 远程服务器:util-linux / e2fsprogs 等更全;适合 lsblk、findmnt、losetup、mkfs、镜像工具。
  • 精通标准按完整工具链;板上缺的命令到服务器练,概念两边通用。
  • 服务器上练块设备:默认用普通文件 + loop,不要对系统盘 dd/mkfs。
  • Android 镜像主机工具可从 AOSP out/host/linux-x86/bin 拷到服务器使用。

正文

1. 两种环境各干什么

环境擅长不擅长 / 注意
Android 设备 真实分区名、by-name、多挂载点、产品路径 命令选项常被裁剪;部分操作需 root
远程 Linux 服务器 完整选项、反复试验、做/拆 loop 镜像 通常没有手机那套 by-name;勿伤系统盘

对象模型两边是同一套(L01-01 / L01-02)。差别主要在:探针齐不齐、路径长什么样、有没有权限。

分工原则:

  • 看现象、对产品路径 → Android
  • 练选项、做可重复实验 → 远程服务器
  • 危险写操作(mkfs、dd 写设备、wipefs)→ 只对 loop 或明确的练习文件,不对系统根盘、不对量产用户数据分区做「练手」

  • 2. Android:从 adb 进 shell

    主机已装好 adb、设备已连接时:

    adb devices
    adb shell

    需要更高权限时(视设备与 userdebug/eng 配置而定):

    adb root
    adb shell
    # 或在 shell 内:
    su

    本专栏常用的观察入口:

    adb shell ls -l /dev/block/by-name | head
    adb shell mount | grep ' /data '
    adb shell df -h /data
    adb shell id

    现象常见原因
    adb devices 无设备 未授权、驱动、线材、未开调试
    Permission denied 当前 uid 不够;试 adb root 或设备是否允许 root
    找不到某命令 toybox 未提供该工具或未链到 PATH

    Android shell 里的许多命令来自 toybox:名字眼熟,选项往往比完整 util-linux / coreutils 少。 后文归属篇会给「常用选项清单」;表中标明 Android 不具备的,以服务器练习为准。


    3. 远程服务器:先确认工具在不在

    登录服务器后自检(包名因发行版而异,命令名如下):

    which lsblk findmnt losetup blockdev blkid mkfs.ext4
    lsblk -V 2>/dev/null || true
    mount –version 2>/dev/null || true

    用途常见命令备注
    块设备拓扑 lsblk Android 上常无
    挂载查看 findmnt、mount findmnt 板上常无
    loop losetup 服务器练镜像/块设备的核心
    容量 blockdev、df、du blockdev 板上可能需 root
    FS 识别 blkid 视镜像是否带
    创建 FS mkfs.ext4 等 只对练习文件/loop

    缺包时按发行版安装 util-linux、e2fsprogs 等(具体 apt/yum 命令以服务器文档为准)。 Android 专用主机工具(如 simg2img、e2fsdroid、lpdump)可从已编译的 AOSP 树拷贝:

    out/host/linux-x86/bin/

    放到服务器某目录后,把该目录加入 PATH,或写全路径调用。


    4. 服务器安全练法:文件 + loop

    目标:得到一个「长得像块设备」的节点,而不去动 /dev/sda、/dev/vda 等系统盘。

    示意流程(路径可自定;需要时加 sudo):

    # 1)准备一个空文件当「假磁盘」(这里 64MiB)
    dd if=/dev/zero of=/tmp/storage-lab.img bs=1M count=64 status=progress

    # 2)挂到空闲 loop 设备
    sudo losetup -f –show /tmp/storage-lab.img
    # 假设打印:/dev/loop0

    # 3)此时 /dev/loop0 就是可练习的块设备对象
    ls -l /dev/loop0
    sudo blockdev –getsize64 /dev/loop0

    # 4)练完释放(先 umount 若已挂载)
    sudo losetup -d /dev/loop0
    rm -f /tmp/storage-lab.img

    硬规矩:

  • mkfs / dd of= / wipefs 的目标必须是自己创建的 loop 或明确练习镜像。
  • 对 lsblk 里挂着 /、/boot、/home 的磁盘,不做格式化练习。
  • 共享服务器上,文件放自己的家目录或 /tmp 下带用户名的路径,避免踩别人的实验文件。
  • 后续 L05~L08 的破坏性步骤,默认都建立在这种 loop 之上。


    5. 同一问题,两边怎么对照练

    以「看见块设备与挂载」为例:

    问题Android远程服务器
    有哪些块设备 ls -l /dev/block lsblk;或 ls -l /dev/sd* /dev/vd* /dev/loop*
    某路径挂在谁上 mount | grep ' /data ' findmnt / 或 mount | grep ' / '
    空间 df -h /data df -h /
    精确字节容量 blockdev –getsize64 <节点>(常需 root) 对 loop:blockdev –getsize64 /dev/loopN
    按名找分区 /dev/block/by-name/… 一般无 by-name;用 lsblk -f / 分区名列

    对照目的:确认对象关系一致,而不是强求两边路径字符串相同。


    6. 权限与「命令在不在」的决策

    命令失败
    ├─ 提示 not found / No such file → 换环境或安装/拷贝工具
    ├─ 提示 Permission denied
    │ ├─ Android:adb root / su;仍不行则换只读观察或服务器练等价项
    │ └─ 服务器:sudo;或检查文件属主
    └─ 提示 busy / target is busy → 先 umount / 查占用(L07)

    读输出时仍用 L01-02 的规矩:先定对象,再解释探针结果。


    7. 本专栏后续练习落点(预告)

    模块主题优先环境
    by-name、真机多挂载点、产品路径 Android
    ls/stat/chmod 语义 两边都可;完整选项偏服务器
    lsblk/findmnt/parted 查看 服务器
    mkfs/fsck/losetup/dd 实验 服务器 + loop
    e2fsdroid/simg2img/lpdump 服务器(主机工具)
    排障五题收口 Android 现象 + 服务器复现实验

    Android 对照

    项说明
    进入方式 adb shell;调试机常见 adb root
    命令实现 多为 toybox
    块设备入口 /dev/block、/dev/block/by-name
    与服务器差异 路径与工具集不同;分区/FS/挂载对象模型相同

    检查清单

    • 能说清:真机观察与服务器练选项分别解决什么问题
    • 会用 adb devices / adb shell 做 L01 级观察
    • 服务器上会用文件 + losetup 得到练习用块设备,并会 losetup -d 释放
    • 明确:不对系统盘、不对量产用户数据做格式化练手
    • 遇到 not found / Permission denied 时,知道换环境、提权或换探针

    练习

    判断题(对 / 错)

  • Android 上没有 lsblk,就不需要再学这条命令。
  • 远程服务器上练习 mkfs 时,可以对挂载了 / 的磁盘直接格式化以便「更真实」。
  • losetup 把普通文件当成块设备来用,适合安全做存储实验。
  • 两边路径不同,所以分区、文件系统、挂载的概念也不通用。
  • 参考答案

  • 错。完整选项在服务器练;概念与排障仍要会。
  • 错。会对系统造成破坏;只用 loop/练习文件。
  • 对。
  • 错。对象模型通用,路径与工具集不同。
  • 操作题 A(Android)

    adb devices
    adb shell ls -l /dev/block/by-name | head
    adb shell mount | grep ' /data '
    adb shell df -h /data

    记下:by-name 里是否有 userdata(或等价名)、/data 的设备与 type。

    操作题 B(远程服务器)

    按第 4 节创建 64MiB 文件并 losetup,然后:

    ls -l /dev/loopN # N 换成实际编号
    sudo blockdev –getsize64 /dev/loopN
    sudo losetup -a | grep loopN
    sudo losetup -d /dev/loopN
    rm -f /tmp/storage-lab.img

    确认:getsize64 结果为 67108864(64×1024×1024),释放后 loop 不再占用该文件。

    读输出题

    $ which findmnt lsblk
    /usr/bin/findmnt
    /usr/bin/lsblk

    $ adb shell which findmnt lsblk
    /system/bin/sh: findmnt: inaccessible or not found

  • findmnt/lsblk 应在哪边练常用选项?
  • 在 Android 上要用什么命令看「/data 挂在谁上」?
  • 参考答案

  • 远程服务器。
  • mount | grep ' /data '(或设备上其它等价查看方式)。

  • 本篇边界

    • 不讲各发行版装包的完整手册
    • 不讲 adb 驱动与公司内网接入流程
    • 不讲 losetup/mkfs 的完整选项清单(L08/L06 归属篇)
    • 不讲量产烧录与解锁策略

    下一篇预告

    L02-01:《文件类型全景:普通文件、目录、符号链接、设备节点》— 从路径行首字母把对象类型认全,为 stat/ls 精读打底。


    L01 模块小结

    篇收获
    L01-01 一条存储链路 + 会读 ls -l / mount / df
    L01-02 对象是主体,命令是探针
    L01-03 Android 观察、服务器练选项与 loop 安全实验

    从 L02 起,按对象深挖;命令常用选项在各自归属篇收束到「必会清单」。

    赞(0)
    未经允许不得转载:171主机测评 » Linux设备与存储精读 · L01-03 | 验证环境:Android 设备 + 远程 Linux 服务器怎么分工练
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址