最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux使用dd命令制作系統(tǒng)鏡像的實(shí)踐指南

 更新時(shí)間:2026年05月06日 08:52:37   作者:知遠(yuǎn)漫談  
在 Linux 系統(tǒng)管理與數(shù)據(jù)備份領(lǐng)域,dd 命令堪稱瑞士軍刀級別的存在,它簡單、原始、強(qiáng)大,能夠直接讀寫磁盤設(shè)備,是制作完整系統(tǒng)鏡像的首選工具之一,本文將從 dd 的基本語法講起,深入剖析其工作原理,手把手教你如何安全高效地制作和還原系統(tǒng)鏡像,需要的朋友可以參考下

引言

在 Linux 系統(tǒng)管理與數(shù)據(jù)備份領(lǐng)域,dd 命令堪稱“瑞士軍刀”級別的存在。它簡單、原始、強(qiáng)大,能夠直接讀寫磁盤設(shè)備,是制作完整系統(tǒng)鏡像的首選工具之一。無論你是系統(tǒng)管理員、嵌入式開發(fā)者,還是熱衷于折騰 Linux 的極客,掌握 dd 制作鏡像的能力都至關(guān)重要。

本文將從 dd 的基本語法講起,深入剖析其工作原理,手把手教你如何安全高效地制作和還原系統(tǒng)鏡像,并結(jié)合 Java 代碼示例展示如何在應(yīng)用程序中集成或調(diào)用 dd 功能。最后還會(huì)探討一些高級技巧、常見陷阱以及替代方案,讓你全面掌握這項(xiàng)技能。

什么是dd命令?

dd(全稱 “data duplicator”,也有說法是 “disk dump”)是一個(gè)低級別的 Unix/Linux 工具,用于復(fù)制文件并對數(shù)據(jù)進(jìn)行轉(zhuǎn)換。它不關(guān)心文件系統(tǒng)的結(jié)構(gòu),而是直接按字節(jié)塊讀取和寫入數(shù)據(jù),因此非常適合用于制作磁盤或分區(qū)的完整二進(jìn)制鏡像。

它的基本語法如下:

dd if=<輸入文件> of=<輸出文件> [選項(xiàng)...]
  • if:input file,指定源文件或設(shè)備。
  • of:output file,指定目標(biāo)文件或設(shè)備。
  • bs:block size,設(shè)置每次讀寫的塊大小,默認(rèn)為 512 字節(jié)。
  • count:復(fù)制多少個(gè)塊。
  • skip / seek:跳過輸入/輸出的前 N 個(gè)塊。
  • conv:轉(zhuǎn)換選項(xiàng),如 sync, noerror, notrunc 等。

示例:備份整個(gè)硬盤

sudo dd if=/dev/sda of=/backup/system.img bs=4M status=progress

這條命令會(huì)把 /dev/sda 整個(gè)硬盤的內(nèi)容原封不動(dòng)地復(fù)制到 /backup/system.img 文件中,塊大小設(shè)為 4MB,并顯示實(shí)時(shí)進(jìn)度。

警告:dd 是一個(gè)“無腦”工具 —— 它不會(huì)驗(yàn)證你是否選對了設(shè)備。一旦輸錯(cuò) of= 參數(shù),可能導(dǎo)致重要數(shù)據(jù)被覆蓋!請務(wù)必三思而后行!

dd的工作原理深度解析

雖然 dd 命令看起來很簡單,但其底層機(jī)制涉及操作系統(tǒng)內(nèi)核、設(shè)備驅(qū)動(dòng)、緩沖區(qū)管理等多個(gè)層面。理解這些有助于我們更高效、更安全地使用它。

數(shù)據(jù)流模型

dd 的本質(zhì)是一個(gè)“管道搬運(yùn)工”。它從輸入設(shè)備(如 /dev/sda)逐塊讀取原始字節(jié),不做任何解釋或處理,直接寫入輸出文件(如 .img 文件)。這種“位對位”的復(fù)制方式確保了鏡像的完整性 —— 包括引導(dǎo)扇區(qū)、分區(qū)表、文件系統(tǒng)元數(shù)據(jù)、空閑空間等全部內(nèi)容都會(huì)被保留。

塊大?。╞s)的影響

bs 參數(shù)決定了每次 I/O 操作的數(shù)據(jù)量。默認(rèn)值 512 字節(jié)太小,效率低下;推薦使用 4M8M 以提高吞吐量。

實(shí)驗(yàn)表明,在機(jī)械硬盤上使用 bs=4M 相比 bs=512 可提升 3~5 倍速度;在 SSD 上提升約 2~3 倍。

# 推薦配置
dd if=/dev/sda of=image.img bs=4M conv=fsync status=progress
  • conv=fsync:確保所有數(shù)據(jù)寫入磁盤后再退出,避免緩存未刷盤導(dǎo)致鏡像損壞。
  • status=progress:顯示實(shí)時(shí)傳輸速率和進(jìn)度(GNU dd 特有)。

實(shí)戰(zhàn):制作系統(tǒng)鏡像的完整流程

下面我們以 Ubuntu 22.04 系統(tǒng)為例,演示如何使用 dd 制作可啟動(dòng)的完整系統(tǒng)鏡像。

步驟 1:確認(rèn)源設(shè)備

首先,使用 lsblkfdisk -l 查看當(dāng)前磁盤布局:

lsblk

輸出示例:

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0 238.5G  0 disk
├─sda1        8:1    0   512M  0 part /boot/efi
├─sda2        8:2    0     1G  0 part /boot
└─sda3        8:3    0 237.5G  0 part /
sdb           8:16   1  14.9G  0 disk
└─sdb1        8:17   1  14.9G  0 part /media/usb

假設(shè)我們要備份的是 /dev/sda,目標(biāo)是外接 USB 設(shè)備 /dev/sdb 上的一個(gè)文件。

步驟 2:掛載目標(biāo)存儲(chǔ)設(shè)備

sudo mkdir -p /mnt/backup
sudo mount /dev/sdb1 /mnt/backup

步驟 3:執(zhí)行 dd 備份

sudo dd if=/dev/sda of=/mnt/backup/ubuntu_full.img bs=4M status=progress conv=fsync

等待命令執(zhí)行完成。根據(jù)磁盤大小和接口速度,可能需要幾十分鐘到數(shù)小時(shí)。

步驟 4:驗(yàn)證鏡像完整性(可選)

可以使用 md5sumsha256sum 對比源設(shè)備和鏡像文件的哈希值:

sudo md5sum /dev/sda
md5sum /mnt/backup/ubuntu_full.img

注意:計(jì)算整個(gè)設(shè)備的哈希非常耗時(shí),通常只在關(guān)鍵場景下使用。

如何從鏡像還原系統(tǒng)?

還原過程其實(shí)就是“反向 dd”:

sudo dd if=/mnt/backup/ubuntu_full.img of=/dev/sda bs=4M status=progress conv=fsync

還原完成后,建議重啟系統(tǒng)并檢查是否正常啟動(dòng)。

小貼士:如果你是在虛擬機(jī)或測試環(huán)境中操作,強(qiáng)烈建議先對目標(biāo)磁盤做快照或備份,以防誤操作導(dǎo)致數(shù)據(jù)丟失!

提升效率的高級技巧

技巧 1:使用壓縮減少鏡像體積

原始鏡像往往包含大量零字節(jié)(未使用空間),我們可以邊復(fù)制邊壓縮:

sudo dd if=/dev/sda bs=4M | gzip -c > /mnt/backup/system.img.gz

還原時(shí):

gunzip -c /mnt/backup/system.img.gz | sudo dd of=/dev/sda bs=4M

壓縮率通??蛇_(dá) 50%~80%,特別適合 SSD 或已使用空間較少的系統(tǒng)。

技巧 2:使用 pv 顯示可視化進(jìn)度條

pv(Pipe Viewer)是一個(gè)強(qiáng)大的管道監(jiān)控工具,能顯示傳輸速度、剩余時(shí)間等。

安裝:

sudo apt install pv

使用:

sudo dd if=/dev/sda | pv | dd of=/mnt/backup/system.img bs=4M

或者更簡潔:

sudo pv < /dev/sda > /mnt/backup/system.img

技巧 3:跳過錯(cuò)誤繼續(xù)復(fù)制(救援模式)

當(dāng)磁盤出現(xiàn)壞道時(shí),標(biāo)準(zhǔn) dd 會(huì)中斷。使用 conv=noerror,sync 可跳過錯(cuò)誤塊:

sudo dd if=/dev/sda of=rescue.img bs=4M conv=noerror,sync status=progress
  • noerror:遇到讀錯(cuò)誤不停止。
  • sync:用零填充缺失的塊,保持鏡像大小一致。

?? 此方法適用于數(shù)據(jù)恢復(fù)場景,但生成的鏡像可能無法正常啟動(dòng)!

在 Java 應(yīng)用中調(diào)用dd命令

雖然 dd 是命令行工具,但在某些 Java 應(yīng)用(如系統(tǒng)管理平臺、自動(dòng)化部署工具)中,我們可能需要?jiǎng)討B(tài)觸發(fā)鏡像備份或還原操作。下面是一個(gè)完整的 Java 示例,展示如何安全地執(zhí)行 dd 命令并監(jiān)控其輸出。

示例 1:基礎(chǔ)命令執(zhí)行器

import java.io.*;
import java.util.concurrent.TimeUnit;
public class DDCommandExecutor {
    public static void main(String[] args) {
        String sourceDevice = "/dev/sda";
        String targetImage = "/backup/system.img";
        int blockSizeMB = 4;
        DDCommandExecutor executor = new DDCommandExecutor();
        boolean success = executor.createImage(sourceDevice, targetImage, blockSizeMB);
        if (success) {
            System.out.println("? 鏡像創(chuàng)建成功!");
        } else {
            System.err.println("? 鏡像創(chuàng)建失敗!");
        }
    }
    public boolean createImage(String source, String target, int blockSizeMB) {
        // 構(gòu)建 dd 命令
        String command = String.format(
            "sudo dd if=%s of=%s bs=%dM status=progress conv=fsync",
            source, target, blockSizeMB
        );
        System.out.println("?? 執(zhí)行命令: " + command);
        try {
            ProcessBuilder pb = new ProcessBuilder("bash", "-c", command);
            pb.redirectErrorStream(true); // 合并錯(cuò)誤流和輸出流
            Process process = pb.start();
            // 實(shí)時(shí)讀取輸出(包括進(jìn)度)
            BufferedReader reader = new BufferedReader(
                new InputStreamReader(process.getInputStream())
            );
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println("?? " + line);
            }
            // 等待進(jìn)程結(jié)束
            boolean completed = process.waitFor(2, TimeUnit.HOURS); // 最長等待2小時(shí)
            if (!completed) {
                process.destroyForcibly();
                System.err.println("? 命令執(zhí)行超時(shí),已強(qiáng)制終止。");
                return false;
            }
            int exitCode = process.exitValue();
            return exitCode == 0;
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
            Thread.currentThread().interrupt();
            return false;
        }
    }
}

示例 2:帶壓縮的鏡像創(chuàng)建(調(diào)用 gzip)

public boolean createCompressedImage(String source, String targetGz, int blockSizeMB) {
    String command = String.format(
        "sudo dd if=%s bs=%dM | gzip -c > %s",
        source, blockSizeMB, targetGz
    );
    System.out.println("?? 執(zhí)行壓縮鏡像命令: " + command);
    try {
        ProcessBuilder pb = new ProcessBuilder("bash", "-c", command);
        pb.redirectErrorStream(true);
        Process process = pb.start();
        BufferedReader reader = new BufferedReader(
            new InputStreamReader(process.getInputStream())
        );
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println("?? " + line);
        }
        boolean completed = process.waitFor(3, TimeUnit.HOURS);
        if (!completed) {
            process.destroyForcibly();
            System.err.println("? 壓縮鏡像創(chuàng)建超時(shí)。");
            return false;
        }
        return process.exitValue() == 0;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

示例 3:異步執(zhí)行 + 回調(diào)通知

在 GUI 應(yīng)用或 Web 服務(wù)中,我們通常希望異步執(zhí)行長時(shí)間任務(wù),并在完成后通知用戶。

import java.util.function.Consumer;
public class AsyncDDExecutor {
    public void createImageAsync(String source, String target, int blockSizeMB, Consumer<Boolean> callback) {
        new Thread(() -> {
            DDCommandExecutor executor = new DDCommandExecutor();
            boolean result = executor.createImage(source, target, blockSizeMB);
            callback.accept(result);
        }).start();
    }
    // 使用示例
    public static void main(String[] args) {
        AsyncDDExecutor async = new AsyncDDExecutor();
        async.createImageAsync("/dev/sda", "/backup/system.img", 4, success -> {
            if (success) {
                System.out.println("?? 異步鏡像創(chuàng)建完成!");
            } else {
                System.err.println("?? 異步鏡像創(chuàng)建失?。?);
            }
        });
        System.out.println("? 主線程繼續(xù)執(zhí)行其他任務(wù)...");
    }
}

提示:生產(chǎn)環(huán)境中應(yīng)加入日志記錄、權(quán)限校驗(yàn)、磁盤空間檢查、異常重試等機(jī)制,上述代碼僅為演示核心邏輯。

ddvs 其他備份工具對比

雖然 dd 功能強(qiáng)大,但它并非萬能。在不同場景下,其他工具可能更適合:

渲染錯(cuò)誤: Mermaid 渲染失敗: Parsing failed: Lexer error on line 3, column 5: unexpected character: ->“<- at offset: 31, skipped 3 characters. Lexer error on line 3, column 9: unexpected character: ->全<- at offset: 35, skipped 5 characters. Lexer error on line 3, column 15: unexpected character: ->:<- at offset: 41, skipped 1 characters. Lexer error on line 4, column 5: unexpected character: ->“<- at offset: 50, skipped 6 characters. Lexer error on line 4, column 12: unexpected character: ->文<- at offset: 57, skipped 5 characters. Lexer error on line 4, column 18: unexpected character: ->:<- at offset: 63, skipped 1 characters. Lexer error on line 5, column 5: unexpected character: ->“<- at offset: 72, skipped 4 characters. Lexer error on line 5, column 10: unexpected character: ->歸<- at offset: 77, skipped 5 characters. Lexer error on line 5, column 16: unexpected character: ->:<- at offset: 83, skipped 1 characters. Lexer error on line 6, column 5: unexpected character: ->“<- at offset: 92, skipped 11 characters. Lexer error on line 6, column 17: unexpected character: ->系<- at offset: 104, skipped 5 characters. Lexer error on line 6, column 23: unexpected character: ->:<- at offset: 110, skipped 1 characters. Lexer error on line 7, column 5: unexpected character: ->“<- at offset: 119, skipped 10 characters. Lexer error on line 7, column 16: unexpected character: ->系<- at offset: 130, skipped 5 characters. Lexer error on line 7, column 22: unexpected character: ->:<- at offset: 136, skipped 1 characters. Parse error on line 3, column 17: Expecting token of type 'EOF' but found `35`. Parse error on line 4, column 20: Expecting token of type 'EOF' but found `25`. Parse error on line 5, column 18: Expecting token of type 'EOF' but found `20`. Parse error on line 6, column 25: Expecting token of type 'EOF' but found `15`. Parse error on line 7, column 24: Expecting token of type 'EOF' but found `5`.

dd vs rsync

特性ddrsync
備份粒度塊級別(整個(gè)設(shè)備)文件級別
是否增量? 否? 是
是否壓縮需配合 gzip內(nèi)置壓縮
是否跨網(wǎng)絡(luò)? 否(需配合 ssh)? 是
是否保留權(quán)限? 是(因?yàn)槭嵌M(jìn)制)? 是
適用場景系統(tǒng)遷移、災(zāi)難恢復(fù)日常備份、文件同步

dd vs Clonezilla

Clonezilla 是基于 ddpartclonentfsclone 等工具構(gòu)建的圖形化克隆系統(tǒng),支持多播、壓縮、增量備份等高級功能。

  • 優(yōu)點(diǎn):界面友好、支持多種文件系統(tǒng)、可網(wǎng)絡(luò)部署。
  • 缺點(diǎn):依賴 Live CD/USB 啟動(dòng),不適合嵌入式或服務(wù)器環(huán)境。

常見錯(cuò)誤與避坑指南

錯(cuò)誤 1:設(shè)備名寫反導(dǎo)致數(shù)據(jù)毀滅

# 危險(xiǎn)!這會(huì)把空白鏡像寫入你的系統(tǒng)盤!
dd if=system.img of=/dev/sda  # ? 如果 system.img 是空的或錯(cuò)誤的

解決方案:

  • 使用 lsblk 雙重確認(rèn)設(shè)備。
  • 在腳本中加入交互式確認(rèn):
read -p "確定要將鏡像寫入 $TARGET_DEVICE 嗎?(y/N): " confirm
[[ "$confirm" != "y" ]] && echo "取消操作。" && exit 1

錯(cuò)誤 2:未使用 sudo 導(dǎo)致權(quán)限不足

dd if=/dev/sda of=image.img
# 輸出:dd: failed to open '/dev/sda': Permission denied

解決方案:始終使用 sudo 操作設(shè)備文件。

錯(cuò)誤 3:目標(biāo)空間不足

如果 /backup 分區(qū)空間小于源磁盤,dd 會(huì)在中途報(bào)錯(cuò):

dd: error writing 'image.img': No space left on device

解決方案:提前檢查空間:

SOURCE_SIZE=$(sudo blockdev --getsize64 /dev/sda)
TARGET_FREE=$(df --output=avail /backup | tail -1)

if [ $SOURCE_SIZE -gt $TARGET_FREE ]; then
    echo "? 目標(biāo)空間不足!"
    exit 1
fi

錯(cuò)誤 4:未同步緩存導(dǎo)致鏡像損壞

有時(shí) dd 返回成功,但實(shí)際數(shù)據(jù)還在內(nèi)存緩存中,突然斷電會(huì)導(dǎo)致鏡像不完整。

解決方案:始終加上 conv=fsync 或手動(dòng)執(zhí)行 sync

sudo dd if=/dev/sda of=image.img bs=4M
sync  # 強(qiáng)制刷盤

跨平臺與網(wǎng)絡(luò)鏡像傳輸

雖然 dd 本身不支持網(wǎng)絡(luò),但我們可以結(jié)合 ssh、netcatrsync 等工具實(shí)現(xiàn)遠(yuǎn)程鏡像操作。

方案 1:通過 SSH 遠(yuǎn)程備份

# 本地執(zhí)行,備份遠(yuǎn)程服務(wù)器的磁盤
ssh user@remote-server "sudo dd if=/dev/sda bs=4M" | dd of=remote_backup.img bs=4M

方案 2:通過 netcat 傳輸(高速局域網(wǎng)適用)

在接收端:

nc -l -p 9000 > received.img

在發(fā)送端:

sudo dd if=/dev/sda bs=4M | nc <receiver_ip> 9000

netcat 無加密,僅限可信內(nèi)網(wǎng)使用!

方案 3:結(jié)合 rsync 傳輸大文件

先在本地生成鏡像,再用 rsync 增量同步到遠(yuǎn)程:

rsync -avz --progress system.img user@backup-server:/backups/

自動(dòng)化腳本示例

下面是一個(gè)完整的 Bash 腳本,包含參數(shù)校驗(yàn)、日志記錄、錯(cuò)誤處理等功能:

#!/bin/bash

# backup-dd.sh - 安全的 dd 鏡像備份腳本

set -e  # 遇錯(cuò)即停

LOG_FILE="/var/log/dd-backup.log"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")

log() {
    echo "[$(date)] $1" | tee -a "$LOG_FILE"
}

confirm_device() {
    local device=$1
    if [[ ! -b "$device" ]]; then
        log "? $device 不是塊設(shè)備!"
        exit 1
    fi

    read -p "即將備份設(shè)備 $device,確認(rèn)繼續(xù)?(y/N): " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        log "?? 用戶取消操作。"
        exit 1
    fi
}

check_space() {
    local device=$1
    local target_dir=$2

    local dev_size=$(sudo blockdev --getsize64 "$device")
    local free_space=$(df --output=avail "$target_dir" | tail -1 | tr -d ' ')

    if [[ $dev_size -gt $free_space ]]; then
        log "? 目標(biāo)目錄空間不足!需要 $(numfmt --to=iec $dev_size),可用 $(numfmt --to=iec $free_space)"
        exit 1
    fi
}

main() {
    if [[ $# -ne 2 ]]; then
        echo "用法: $0 <源設(shè)備> <目標(biāo)目錄>"
        echo "示例: $0 /dev/sda /mnt/backup"
        exit 1
    fi

    SOURCE_DEV="$1"
    TARGET_DIR="$2"
    TARGET_FILE="$TARGET_DIR/system_${TIMESTAMP}.img"

    log "?? 開始備份設(shè)備 $SOURCE_DEV 到 $TARGET_FILE"

    confirm_device "$SOURCE_DEV"
    check_space "$SOURCE_DEV" "$TARGET_DIR"

    log "? 開始 dd 復(fù)制..."
    sudo dd if="$SOURCE_DEV" of="$TARGET_FILE" bs=4M status=progress conv=fsync 2>&1 | tee -a "$LOG_FILE"

    log "? 鏡像創(chuàng)建完成:$TARGET_FILE"
    ls -lh "$TARGET_FILE" | tee -a "$LOG_FILE"
}

main "$@"

保存為 backup-dd.sh,賦予執(zhí)行權(quán)限:

chmod +x backup-dd.sh
sudo ./backup-dd.sh /dev/sda /mnt/backup

總結(jié)與最佳實(shí)踐

dd 是一把鋒利的雙刃劍 —— 用得好,它是系統(tǒng)救星;用得不好,它就是數(shù)據(jù)殺手。以下是幾條黃金守則:

Always Double-Check Devices
永遠(yuǎn)不要相信自己的記憶,執(zhí)行前用 lsblk、fdisk -l 確認(rèn)設(shè)備名。

Use Large Block Size
至少使用 bs=4M 提升效率。

Add conv=fsync
確保數(shù)據(jù)真正落盤,避免緩存誤導(dǎo)。

Monitor Progress
使用 status=progresspv 實(shí)時(shí)查看狀態(tài),避免“盲等”。

Backup First, Then Experiment
在生產(chǎn)環(huán)境操作前,先在測試機(jī)或虛擬機(jī)上演練。

Compress When Possible
對于稀疏磁盤,壓縮可節(jié)省大量空間和傳輸時(shí)間。

Log Everything
記錄命令、時(shí)間、輸出,便于事后審計(jì)和排錯(cuò)。

Automate with Caution
自動(dòng)化腳本必須包含校驗(yàn)和回滾機(jī)制,避免批量災(zāi)難。

結(jié)語

通過本文,你應(yīng)該已經(jīng)掌握了使用 dd 命令制作系統(tǒng)鏡像的全套技能 —— 從基礎(chǔ)語法到高級技巧,從命令行操作到 Java 集成,從本地備份到網(wǎng)絡(luò)傳輸。更重要的是,你學(xué)會(huì)了如何安全、高效、負(fù)責(zé)任地使用這個(gè)強(qiáng)大工具。

記住,在 Linux 世界里,權(quán)力越大,責(zé)任越重。每一次 dd 的執(zhí)行,都可能改變系統(tǒng)的命運(yùn)。愿你手中的 dd,永遠(yuǎn)是守護(hù)數(shù)據(jù)的盾牌,而非毀滅系統(tǒng)的利劍。

以上就是Linux使用dd命令制作系統(tǒng)鏡像的實(shí)踐指南的詳細(xì)內(nèi)容,更多關(guān)于Linux dd命令制作系統(tǒng)鏡像的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

林州市| 盐山县| 华坪县| 丽水市| 开江县| 遵义县| 北碚区| 万全县| 泽普县| 和平县| 绥滨县| 金坛市| 金昌市| 定远县| 西平县| 东乡族自治县| 阜新| 河津市| 革吉县| 会东县| 盐边县| 哈尔滨市| 女性| 宁都县| 塔城市| 洛南县| 贵溪市| 江安县| 惠水县| 兰考县| 嘉峪关市| 璧山县| 台安县| 军事| 古田县| 南陵县| 班玛县| 昌宁县| 唐河县| 昌江| 乳源|