分类 操作系统 下的文章

之前一直都是使用scp远程拷贝文件,最大的麻烦在于它每次都是全量拷贝。没有使用rsync的原因是,这货在windows没有什么免费开源又原生的安装包——基于Cygwin的不算。

考虑到如今Docker镜像已经是大家的标配了,我们可以直接在本地构建一个工具箱镜像,然后在工具箱容器内跑rsync

FROM debian:latest

RUN apt-get update
RUN apt-get upgrade
RUN apt-get install -y openssh-client
RUN apt-get install -y wget curl git 
RUN apt-get install -y rsync

ENTRYPOINT [ "/bin/bash" ]

构建工具箱镜像,这个镜像是未来我们手头随时可用的百宝箱:

docker build -t newbiebox:0.1.0 .  

powershell中挂载本地.ssh目录,运行一个用完即删的容器:

docker run --rm --name newbiebox -it `
    -v C:/Users/stdunit/.ssh:/root/.ssh `
    -v C:\Users\stdunit\Desktop:/Desktop `
    newbiebox:0.1.0

这里挂载本地.ssh目录是因为rsync远程拷贝是基于ssh的,为了在容器内免密码登录远程服务器,需要把本地宿主上的.ssh私钥和密钥拷贝暴露给我们的容器。

如果是第一次挂载.ssh,可能需要修复一下这个目录下的读写权限——在windows下我们通常意识不到这个问题,但是Linux对权限检查比较严格。在容器内运行如下命令:

chmod 700 /root/.ssh             # 只有用户有访问权限
chmod 600 /root/.ssh/id_rsa      # 只有用户有读写权限
chmod 644 /root/.ssh/id_rsa.pub  # 让其他人可以读取
chmod 644 /root/.ssh/config      # 便客户端能读取配置文件

然后在容器内,使用rsync进行远程拷贝:

rsync -avz /Desktop/test-rsync/ username@remote-server:/dst/test-r

如果远程ssh的端口被改了,可以使用 -e "ssh -p 端口号"的形式:

rsync -e "ssh -p PORT" -avz /Desktop/test-rsync/ username@remote-server:/dst/test-r

上面的这两条指令是把本地文件同步到远程服务器,通过对调源路径和目标路径,可以实现把远程服务器的文件同步到本地:

rsync -e "ssh -p PORT" -avz user@remote-server:/path-to-backup /Desktop/backup/

背景

在云厂商提供廉价的 Linux ECS 方案中,往往只配了单颗虚拟硬盘。一般来说,这类廉价ECS搭配的硬盘的容量都非常小,仅能满足系统本身运行。为了满足日常所需,往往还需要加购第二颗硬盘,为此,我需要了解一点磁盘分区知识。

文件系统的概念

文件系统是存储和管理文件的方法。文件系统使得用户保存数据时,不必关心数据实际保存在硬盘(或者光盘)的数据块地址,只需要记住这个文件的所属目录和文件名。

不同的文件系统具有不同的特性,例如性能、安全性和兼容性。

常见的文件系统有:

  • ext4:常用于Linux系统,具有良好的性能和可靠性。
  • NTFS:常用于Windows系统,支持大文件和权限控制。
  • FAT32:用于跨平台兼容性,但不支持大文件和权限。

磁盘和分区

在Linux中设备出现在/dev/路径下。一个虚拟磁盘往往用vdx表示,其中x=a,b,c,...。比如/dev/vda/dev/vdb、...等。

一块磁盘往往会被划分成多个分区来用作不同的用途。硬盘的第一个扇区(512 字节),包含分区表引导代码,称之为主引导记录(MBR)。其中,分区表记录了磁盘各个分区的起始位置。

阅读剩余部分